Инструменты пользователя

Инструменты сайта


examination:flp:question56

Содержание

fronttoken

Предикат fronttoken выполняет три взаимосвязанные функции, в зависимости от типа аргументов, который используется для обращения к нему.

 fronttoken(String1,Token,Rest) %(i,о,о) (i,i,о) (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 завершается успешно, в противном случае - неуспешно.

В случае если использован поток (о,i,i), предикат создает объединение Token и Rest, связывая String1 с результатом.

Последовательность знаков является лексемой, если она представляет собой: имя в соответствии с синтаксисом Пролога; число (предшествующий ему знак является отдельной лексемой); отличный от пробела знак.

Предикат fronttoken отлично приспособлен для разбиения строки на лексические символы.

Пример в следующей программе иллюстрирует способ использовании предиката fronttoken для разбития предложения на список имен. Если задать целевое утверждение:

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

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

 [bill,fred,tom,dick,harry]
 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(_, []).
  

frontstr

Предикат frontstr расщепляет String1 на две части. Синтаксис предиката:

 frontstr(NumberOfChars,String1,StartStr,EndStr) % (i,i,o,o)

где StartStr содержит NumberOfChars первых символов из String1, a EndStr содержит остаток. При обращении к frontstr первые два параметра должны быть связанными, а последние два - свободными.

gotowindow

Предикат gotowindow позволяет выполнять быстрое переключение между двумя окнами, которые не перекрываются. Его форма:

   gotowindow(<номер окна>). 

Этот предикат выполняется быстрее, чем shiftwindow, и поэтому его следует использовать для переключения между окнами, содержащими большое количество текста.

goal

Во существу, раздел goal (цели) аналогичен телу правила: это просто список подцелей. Цель отличается от правила лишь следующим: за ключевым словом goal не следует «:-»; при запуске программы Пролог автоматически выполняет цель.

Это происходит так, как будто Пролог вызывает goal, запуская тем самым программу, которая пытается разрешить тело правила goal. Если все подцели в разделе goal истинны, - программа завершается успешно. Если же какая-то подцель из дела goal ложна, то считается, что программа завершается неуспешно (хотя чисто внешне никакой разницы в этих случаях нет, - программа просто завершит свою работу).

examination/flp/question56.txt · Последние изменения: 2014/01/15 08:17 (внешнее изменение)