【发布时间】:2018-09-20 23:35:39
【问题描述】:
我不知道如何为以下场景编写 Prolog 程序。
1. If any two person having same hobby then they like each other.
2. Every gardener likes the Sun.
我这样做了,但我不知道它是否正确。
like(gardener,sun).
请帮我解决。
【问题讨论】:
标签: prolog
我不知道如何为以下场景编写 Prolog 程序。
1. If any two person having same hobby then they like each other.
2. Every gardener likes the Sun.
我这样做了,但我不知道它是否正确。
like(gardener,sun).
请帮我解决。
【问题讨论】:
标签: prolog
Prolog 规则遵循“reversed-IF”模板:
Head :- Goal1, ..., GoalN.
意味着(大致),“Head 持有 如果 Goal1, ..., GoalN 全部持有”。
反过来说,“如果 Goal1, ..., GoalN 全部成立,那么 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) 的最自然编码简单地统一为X = Y,这相当于您编写的事实。事实是没有实体的规则。
【讨论】: