Скачиваний:
34
Добавлен:
01.05.2014
Размер:
109.06 Кб
Скачать

Iterate(g) Выполнение g до тех пор, пока ее решение не завершится отказом (эффективно).

fork_exec(file,Comm) С-подобная команда.

ancestor(G,N) Цель G — N-й предок текущей цели (используется при

отладке).

cutg(G) Отсечение с учетом предыстории.

retry(g) Повторение G.

Арифметические предикаты:

• Арифметические системные вызовы:

Т1 < t2 Значение арифметического выражения Т1 меньше, чем значение арифметического выражения T2.

Т1 = \ = T2 Значение выражения Т1 не равно значению выражения Т2

Т1 > T2 Значение выражения Т1 больше, чем значение выражения T2

Т1  T2 Значение выражения Т1 больше или равно значению выражения T2.

Т1  T2 Значение выражения Т1 меньше или равно значению выражения T2.

Т1 = : = T2 Значение выражения Т1 не равно значению выражения T2.

R: = Exp R-результат вычисления арифметического выражения Ехр.

R is Ехр Возможная форма записи оператора : =.

• Арифметические операции

Х + Y Сложение.

Х – Y Вычитание.

X*Y Умножение.

X/Y Деление.

X mod Y Нахождение остатка от деления Х на Y.

- Х Унарный минус.

+ Х Унарный плюс.

Загрузка и повторная загрузки программы:

Повторная загрузка выполняется посредством

[filel,file2...,...].

или - reconsult(file I ),reconsult(file2),...

тогда как загрузка выполняется посредством

[+ file 1,+fiie2,...,...],

или -consult;(file1),consult(file2)....

Отметим, что это может быть сделано только на верхнем уровне. Для ввода процедур с терминала необходимо воспользоваться файлом пользователя:

[user] или [+ user]

и затем вводить свои предложения.

Операционная оболочка:

Пользователь может определить свою собственную операционную оболочку с помощью предиката shell/0. Системная оболочка (shell) по умолчанию определяется как

$shell: — shel1,abort.

$shell: —

ttynl, disptay(‘ |? - '),spread(Goa1b,Vs),

s_expand_goal(Goalb,Goal),

user_call(Goal,Vs),abort.

expand_goal:

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

expand_clause:

определяется так же, как и предикат expand_ goal, но применяется к вызванным предложениям.

Оболочка:

s_expand_goal Системная расширенная цель.

user_call Выполнить вызов пользователя.

display _ result(Vs) Вывести на экран дисплея значения переменных

get_reply Чтение ответа пользователя с терминала.

cons_list Для загрузки ряда файлов, использующих списки.

С. Предварительно определяемые операторы

Для ввода-вывода составных термов обычно используются унарные или бинарные операторы. Унарные операторы могут быть префиксными (onepaтор предшествует аргументу), постфиксными (оператор следует за аргументом) или инфиксными (оператор записывается между двумя аргументами).

Чтобы избежать двусмысленности, каждый оператор получает приоритет, а также тип и обозначение, что позволяет различать операторы одинакового приоритета. Тип оператора и число аргументов описываются с использованием следующих соглашений:

  • для префиксных операторов -

fx означает, что приоритет аргумента меньше, чем приоритет оператора. fy означает, что приоритет аргумента может быть равен приоритету оператора.

  • для постфиксных операторов

xf и yf определяются аналогично префиксным операторам.

  • для инфиксных операторов -

xfx- означает, что оба подвыражения, являющиеся аргументами оператора j, должны иметь приоритет, меньший чем приоритет оператора;

xfy- левый аргумент должен иметь приоритет, меньший чем приоритет оператора;

yfx- правый аргумент должен иметь приоритет, меньший чем приоритет оператора.

Для определения типа оператора используется конструкция

|? - ор(Приоритет, Тип, Оператор).

где Приоритет может принимать значения от 1 до 1200, Тип - определен выше, Оператор-имя оператора или список имен.

Напомним, что приоритет аргумента должен быть меньше 1000 (этот приоритет соответствует оператору ‘,’). Таким образом, следует писать

assert((A: - В))

а не

assert(A: - В)

Определения операторов:

:-(op(1200.fx,[:-,?-])).

:-op(1200,xfx,[(: -). < -,]).

:-op(1100,xfy,’;’).

:-op(1000,xfy,’;’).

:- op(900,fx,[not]).

:- op(700,xfx,[=,\ =, is,: =,= ..,= =,\= = ,= : =,= \ =, < , > ,  ,]).

:- op(500,yfx,[: +,-]).

:- op(500,fx,[(+),(-)]).

:- op(400,yfx,[*,/,//]).

:- op(300,xfx,[mod]).

Соседние файлы в папке prolog14_end