Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Приложение 2. Встроенные предикаты и операторы




Предикат/оператор Описание
write(Term) Вывести в текущий поток вывода Term.
read(Term) Извлечь из текущего потока вывода следующий терм и унифицировать его с Term. Ввод дожжен заканчиваться точкой.
tell(File) Открыть файл для записи и перевести на него текущий поток вывода.
told Перевести текущий поток вывода на стандартный поток вывода.
see(File) Открыть файл для чтения и перевести на него текущий поток ввода.
seen Перевести текущий поток ввода на стандартный поток ввода.
append(List1,List2, List3) Успешен, когда список List3 унифицируем с объединением списков List1 и List2. Все аргументы могут быть свободными переменными. Результат унификация соответствующих списков.
append(ListOfLists, List) Успешен, когда объединение списка списков ListOfLists унифицируем со списком List. Результат: унификация соответствующих списков.
member(Elem, List) Успешен, когда Elem унифицируем с одним из элементов списка List. Результат – унификация соответствующего элемента списка с Elem.
nextto(X, Y, List) Успешен, когда Y следует непосредственно за X в списке List.
delete(List1, Elem, List2) Удалить все элементы списка List1 унифицируемые с Elem. Результат помещается в List2.
select(Elem, List, Rest) Успешен, когда Rest является списком List с удалённым элементом Elem. То есть этим предикатом можно удалять и вставлять элементы списка. Пример: ?- select(a,L,[1,2,3]). L = [a, 1, 2, 3]; L = [1, a, 2, 3]; L = [1, 2, a, 3]; L = [1, 2, 3, a]; false.
nth0(Index, List, Elem) Успешен, когда элемент спика List с номером Index унифицируем с Elem. Отсчёт номеров элементов начинается с 0.
nth1(Index, List, Elem) Тоже, что и nth0/3, но отсчёт номеров элементов начинается с 1
last(List, Elem) Успешен, когда Elem унифицируется с последним элементом списка List. Если хвост списка List не определён, то при бектрекинге хвост будет увеличиваться.
reverse(List1, List2) Изменяет порядок элементов List1 и унифицирует результат с List2.
permutation(List1, List2) Успешен, когда список List1 образован из списка List2 перестановкой элементов.
sumlist(List, Sum) Унифицирует Sum с суммой элементов списка List.
max_list(List, Max) Унифицирует Max с максимальным элементом списка List.
min_list(List,Min) Унифицирует Min с минимальным элементом списка List.
IntExpr1 mod IntExpr2 Остаток от деления IntExpr1 на IntExpr2.
IntExpr1 // IntExpr2 Целая часть от деления IntExpr1 на IntExpr2
sleep(Time) Приостановление выполнения на Time секунд.
Term =.. List Выражение истинно когда терм Term инициализируется с термом соответствующим списку List, головой которого является функтор терма, а оставшийся хвост представляет собой список аргументов терма. Пример: ?- a(b(1),2,3,X)=..L. L = [a, b(1), 2, 3, X]. ?- a(b(1),2,3,X)=..[a,b(X)|_]. X = 1. ?- a(Y,2,3,X)=..[a,b(2)|_]. Y = b(2). ?- Term=..[a,b,c(4),1,2,3,X]. Term = a(b, c(4), 1, 2, 3, X). Таким образом с помощью данного оператора можно конструировать термы из элементов и «разбирать» их на элементы.
call(Goal) «Запустить на выполнение» предикат хранящийся в Goal. Этот предикат может потребоваться, например, после конструирования предиката предыдущим оператором. Пример: ?- assert(a(1)). ?-read(Y),X=..[a,Y],call(X). |: 1. Y = 1, X = a(1). ?- read(Y),X=..[a,Y],call(X). |: 23. false.
op(Precedence, Type, Name) Объявление операторной формы с именем Name, приоритетом Precedence и типом Type для предиката с именем Name. Новые операторы можно вводить для увеличения удобства записи нужных предикатов (пример на с. 17)

Больше информации о встроенных предикатах можно найти во встроенной в SWI-Prolog англоязычной справке. Для доступа к ней из командного окна выбрать меню Help->Online Manual либо набрать запрос?-help. Поиск в справке (по функтору) можно осуществлять в нижнем поле поиска.

 

ЛИТЕРАТУРА

1. Хоггер К. Введение в логическое программирование. - М.: Мир, 1988. - 349 с.

2. Клоксин У., Меллиш К. Программирование на языке Пролог. - М.: Мир, 1987. - 336 с.

3. Стерлинг Л., Шапиро Э. Искусство программирования на языке Пролог. - М.: Мир, 1989, - 235 с.

4. Братко И. Программирование на языке Пролог для искусственного интеллекта. - М.: Мир, 1990. - 560 с.

5. Ковальски Р. Логика в решении проблем. - М.: Наука, 1990. - 280 с.

6. Малпас Дж. Реляционный язык Пролог и его применение. - М.: Наука, 1990.- 464 с.

7. Стобо Д.Ж. Язык программирования Пролог. - М.: Радио и связь, 1993. - 368 с.

 

 

1. ЗНАКОМСТВО С SWI/PROLOG. ЗАПУСК ПРОСТОЙ ПРОГРАММЫ... 3

1.1. ГЛАВНОЕ МЕНЮ... 3

1.2. ПЕРВАЯ ПРОГРАММА.. 3

1.3. ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ ПРЕДИКАТОВ.. 8

1.4. ВЫПОЛНЕНИЕ И ТРАССИРОВКА ПРОГРАММЫ... 9

2. СТРУКТУРЫ ДАННЫХ. СЛОЖНЫЕ УТВЕРЖДЕНИЯ В ПРОЛОГЕ.. 16

2.1. СТРУКТУРА ЯЗЫКА.. 16

2.2. СОСТАВНЫЕ ЦЕЛИ-ЗАПРОСЫ... 16

2.3. СОСТАВНЫЕ ОБЪЕКТЫ... 17

2.4. ОТРИЦАНИЕ В ПРОЛОГЕ.. 18

3. РЕКУРСИЯ В ПРОЛОГЕ.. 20

3.1. РЕКУРСИЯ.. 20

3.2. ПРОГРАММИРОВАНИЕ С НАКОПИТЕЛЯМИ.. 23

3.3. РЕКУРСИВНЫЕ ОБЪЕКТЫ... 24

4. УПРАВЛЕНИЕ ЛОГИЧЕСКИМ ВЫВОДОМ... 24

4.1. ОТСЕЧЕНИЕ(CUT) 24

4.2. ОРГАНИЗАЦИЯ ЦИКЛА BAF-МЕТОД.. 26

4.3. ОРГАНИЗАЦИЯ ЦИКЛА UDR-МЕТОД.. 27

4.4. ИСПОЛЬЗОВАНИЕ НАДРЕЗОВ (SNIP) 28

5. СПИСКИ.. 30

6. МОДИФИКАЦИЯ УТВЕРЖДЕНИЙ ПРОГРАММЫ. РАБОТА С БАЗОЙ ДАННЫХ. 32

7. ПРИЛОЖЕНИЕ 1. ТИПЫ ДАННЫХ SWI/PROLOG.. 36

7.1. ПЕРЕМЕННЫЕ.. 36

7.2. СИМВОЛЬНЫЕ КОНСТАНТЫ ИЛИ АТОМЫ... 36

7.3. ЦЕЛЫЕ ЧИСЛА. 37

7.4. РАЦИОНАЛЬНЫЕ ЧИСЛА.. 37

7.5. ЧИСЛА С ПЛАВАЮЩЕЙ ТОЧКОЙ.. 38

7.6. СТРОКИ.. 38

7.7. СТРУКТУРЫ... 38

8. ПРИЛОЖЕНИЕ 2. ВСТРОЕННЫЕ ПРЕДИКАТЫ И ОПЕРАТОРЫ. 39

ЛИТЕРАТУРА.. 42

 


[1] Не вводите имя файла с расширением без апострофов.

[2] Отладка происходит в командной строке в диалоговом окне SWI/PROLOG-а и отображает последовательность выполняемых подцелей и результат выполнения.

[3] Графический отладчик отображает информацию в собственном – отдельном окне.

[4] Не забывайте каждый раз ставить точку после предикатов или группы предикатов (записанных через запятую) – каждое предложение заканчивается точкой.

[5] До последнего правила вывод дойдет только, если X>0, во всех остальных случаях это правило не будет даже рассматриваться как альтернатива в точке возврата (точка будет заморожена после выполнения операции отсечения).

[6] Не забывайте ставить точки в конце вводимых слов.

[7] Т.е. «замораживаются» точки возврата только для предикатов внутри надреза.

[8] Не путать символ апострофа (') с двойной кавычкой (").

[9] Между функтором и левой скобкой пробел не ставится.





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 487 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Неосмысленная жизнь не стоит того, чтобы жить. © Сократ
==> читать все изречения...

2285 - | 1991 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.