logo
TurboProlog / Документация / TOM_1

Fronttoken/3

fronttoken выполняет 3 взаимосвязанные функции, в зависимости от ти-

па модели потока, который используется для обращения к нему.

fronttoken(String1,Token,Rest)

/* (i,o,o) (i,i,o) (i,o,i) (i,i,i) (o,i,i) */

В случае потока (i,o,o) fronttoken находит первую лексему String1,

связывает ее с Token, а остаток String1 связывает с Rest. Варианты потока

(i,i,o),(i,o,i), а также (i,i,i) служат для проверки; если связанные ар-

гументы соответствуют частям String1 (первой лексеме, всему, что находит-

ся после первой лексемы, или же им обоим), то fronttoken завершается ус-

пешно, в противном случае - неудачно.

В случае, если использован поток (o,i,i,), предикат создает объеди-

нение Token и Rest, связывая String1 с результатом.

Последовательность знаков является одной лексемой, если она удовлет-

воряет следующим условиям:

- либо это имя в соответствии с синтаксисом Турбо Пролога;

- либо это число (предшествующий ему знак является отдельной

лексемой);

- либо это отличный от пробела знак.

fronttoken отлично приспособлен для разбиения строки на лексические

символы.

Пример

Программа CH13EX02.PRO иллюстрирует способ использования предиката

fronttoken для разбития предложения на список имен. Если задать целевое

утверждение:

string_namelist("bill fred tom dick harry",X).

то после обработки параметров Х будет связано со списком:

(bill, fred, tom, dick, harry)

/* Program CH13EX02.PRO */

domains

namelist = name*

name = symbol

predicates

string_namelist(string, namelist)

clauses

string_namelist(S, [H|T]) :-

fronttoken(S, H, S1), !,

string_namelist(S1, T).

string_namelist(_, []).