?- 12 = < 24.
да
?- X is 50, X =\= 50.
нет
Все переменные, входящие в арифметические выражения, должны быть конкретизированы.
Структуры данных
Существует три типа термов: константа, переменная, составной терм.
Составные термы языка Пролог аналогичны записям языка Паскаль или структурам языка Си.
Пример 3.
сделка(клиент(петров,100,4), дата(2006,10,5)).
Факт “ сделка ” связывает информацию о сделке с клиентом.
Структура “ клиент ”, содержит информацию о клиенте, берущем автомашину напрокат. В структуре содержится информация о фамилии клиента, суточном тарифе и количестве дней, на которое взята машина. Структура “ дата” содержит информацию о годе, месяце и дне заключения сделки.
Пример 4.
Приведем правило, в котором аргументом служит структура “ клиент ”, а в результате обработки правила подсчитывается сумма, которую должен заплатить клиент:
итого(A,Summa):- сделка(клиент(A, Tarif, Dni), _), Summa is Tarif*Dni.
Запрос к правилу “итого” можно записать так:
?− итого(петров,S).
|
|
S = 400
Встроенный предикат “=”, имеет два аргумента. Этот предикат проверяет, унифицируются ли друг с другом его аргументы. Если в одном из аргументов содержатся неконкретизированные переменные, то в случае успешной унификации они конкретизируются.
Пример 5.
?− X is 10, Y is X+2, Y = 10.
no
Пример 6.
?− клиент(смит,29,4) = клиент(X,Y,Z).
X = смит
Y = 29
Z = 4
Рекурсивные структуры
Рекурсивные структуры аналогичны односвязным спискам, в которых один из аргументов каждой записи указывает на следующую запись.
Рекурсивная процедура можно_путешествовать предназначена для построения рекурсивной структуры, описывающей все промежуточные пункты, посещаемые по пути из исходного города в пункт назначения.
путешествие(губкин, белгород, автобус).
путешествие(белгород, орел, поезд).
путешествие(орел, брянск, поезд).
путешествие(брянск, дятьково, автобус).
можно_путешествовать(A,B,путь(A,VidTr,B)):-путешествие(A,B,VidTr).
можно_путешествовать(A,B,путь(A,VidTr,Put)):-путешествие(A,C,VidTr), можно_путешествовать(C,B,Put).
Можно ли из Белгорода добраться до Дятьково? Если да, то какими видами транспорта?
?− можно_путешествовать(белгород, дятьково, X).
X = путь(белгород, поезд, путь(орел, поезд, путь(брянск, автобус, дятьково)))
Списки
Списки обозначаются следующим образом:
[ терм1,терм2 | X]
Символ | разделяет список на две части: начало списка и остаток списка.
Пример 7. Унификация списка.
?- [F|R]=[1,2,3,4,5].
F = 1
R = [2, 3, 4, 5]. % остаток списка является списком
yes
?− [F1,F2|R]=[1,2,3,4,5].
F1 = 1
F2 = 2
R = [3, 4, 5].
yes