У каждого имеются свои представления о том, какая форма синтаксиса наиболее естественна и наглядна. К счастью, синтаксис Пролога довольно прост и не дает большого простора для вариаций. Один из спорных вопросов – как следует отличать переменные от атомов. Здесь для обозначения переменных используются имена, начинающиеся с прописной буквы, а для обозначения атомов – со строчной. Кроме того, мы допускаем атомы, составленные из последовательностей знаков, таких как '*', '.' и '='. Некоторые Пролог-системы придерживаются в отношении использования прописных и строчных букв обратного соглашения (когда имена переменных начинаются со строчной буквы). Другие различают имена переменных за счет того, что начинают их со специальной литеры, как, например, '_PERSON' или '*PERSON'. Это удобно для систем, где прописные и строчные буквы не различаются. Другим моментом, где возможны расхождения, является способ записи утверждений – как заголовок утверждения отделяется от тела, как разделяются отдельные цели в теле и как обозначаются вопросы к системе. Для этого вполне могут употребляться атомы, отличные от ':-', '.' и '?-', или использоваться более сложные методы. В одной из ранних систем заголовок и цели утверждения размещались одно за другим, причем перед заголовком утверждения ставили знак '+', а перед каждой из подцелей – знак '-'. Короче говоря, вам могут встретиться способы записи утверждений, приведенные ниже, а также и отличные от них.
Так же посмотрите http://uiscom.ru/virtuozz/virtual_ats.php для вашего бизнеса.
uncle(X,Z):- parent(X,Y), brother(Y,Z).
Uncle(x,z) ‹- Parent(x,y) & Brother(y,z).
UNCLE(_X,_Z):- PARENT(_X,_Y), BROTHER(_Y,_Z).
+UNCLE(*X,*Z) -PARENT(*X,*Y) -BROTHER(*Y,*Z).
((UNCLE X1 ХЗ) (PARENT X1 Х2) (BROTHER X2 ХЗ))
uncle(X,Z): parent(X,Y); brother(Y,Z).
|