Пример 2. Все переменные, входящие в арифметические выражения, должны быть конкретизированы

?- 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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: