在以下情况下,我不知道如何编写Prolog程序。
1. If any two person having same hobby then they like each other.
2. Every gardener likes the Sun.
我这样做了,但我不知道它是否正确。
like(gardener,sun).
请帮助我解决它。
答案 0 :(得分:3)
Prolog规则遵循“ reversed-IF”模板:
Head :- Goal1, ..., GoalN.
(大致)表示“如果{em> Head
,...,Goal1
全部成立,则GoalN
持有”。
用另一种方法表示“ if Goal1
,...,GoalN
全部成立,然后 then {{1} }也成立”。
这正好适合您的第一句话,因此可以将其编码为规则:
Head
第二句话也适合同一模板:
likes(A, B) :- % Head :-
hobby( A, HobbyA), % Goal1,
hobby( B, HobbyB), % Goal2,
same( HobbyA, HobbyB), % Goal3,
dif( A, B). % Goal4.
% different persons, not the same one
使用likes(A, sun) :-
isA(A, gardner).
的最自然的编码作为统一的isA( X, Y)
,这等同于您编写的事实。事实是没有根据的规则。