Пример 1. Рассмотрим задачу поиска девушкой жениха, который должен удовлетворять определенным ее требованиям

Рассмотрим задачу поиска девушкой жениха, который должен удовлетворять определенным ее требованиям. Если ввести предикат

man (symbol, symbol, integer),

где аргументы могут обозначать имя, цвет глаз, возраст и т.п., это правило приобретет вид

ideal(X):- man(X,C,A), C=blue, A<=30.

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

имя_функтора (свойство1, свойство2,, свойство )

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

Например, введем предикат владеть(объект) или have(object), и пусть к собственности будет принадлежать автомобиль, книга, и конь и каждый из этих функторов имеет разное количество свойств, которые принадлежат к разным типам Пролога. Тогда запись решения задачи приобретет вид

domains object=book(symbol,symbol,integer);

horse(symbol);

avto(symbol,integer).

predicates man(symbol,integer,integer,object).

ideal(symbol).

сlauses man(“Stas”,28,186,have(book(“Куприн”,”Поединок”,1902))).

man(“Vlad”,27,183,have(avto(“Volvo”,350))).

ideal(X):- man(X,A,H,have(book(“Куприн”,_,_))),A<=30,H>=180.

или

ideal(X):- man(X,A,H,have(avto(M,_))), A<=30, H>=180, M=”Volvo”.

Итоговое содержание файла main.pro имеет вид

implement main
open core
domains object=book(symbol,symbol,integer); horse(symbol); avto(symbol,integer).

property=have(object).
class facts
man: (symbol,integer,integer,property).
class predicates
ideal: (symbol) nondeterm(o).
clauses
man("Stas",28,186,have(book("Куприн","Поединок",1902))).
man("Vlad",27,183,have(avto("volvo",350))).
ideal(X):- man(X,A,H,have(book("Куприн",_,_))),A<=30,H>=180.
run():- console::init(),ideal(X),stdio::write(X),stdio::nl,fail.

run():- stdio::write("fail"),succeed().

end implement main
goal mainExe::run(main::run).


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



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