Prolog predicates - 基于此,问题没有足够的清晰度,所以我在上下文中发布问题。
这是一个问题,我将发布到目前为止我所做的事情和我正在努力的事情。
詹姆斯和维多利亚已婚,但维多利亚爱上了柯特。柯特并不爱她,因为他仍然嫁给和关心凯莉,尽管她对亨利更感兴趣。亚瑟在浪漫方面倾向于维多利亚,但他与亨利竞争,亨利虽然与水晶结婚,也爱维多利亚,詹姆斯对此感到浪漫。
1]使用Prolog谓词表示此信息。只使用两个谓词名称。
这是我对此
的解释is_Married([詹姆斯,维多利亚],[简略,凯丽],[亨利,水晶])。
is_inLove([维多利亚,简略],[凯丽,亨利],[亚瑟,维多利亚],[亨利,维多利亚],[詹姆斯,维多利亚])。
对于第二个谓词,我也不确定我是否应该按照它所说的那样[Curt,Kylie]并且仍然关心这个场景。
2]如果两个参与者都浪漫地倾向于其他人而不是彼此,那么已婚的人就会陷入困境。 Prolog规则如何代表这一陈述。
我的回答
∀∃x:is_married(X,Y)∧¬is_inLove(X,Y)∨is_inLove(Y,X)→on_rocks(x)
我对如何代表婚姻感到有些困惑,婚姻与两个参与者相关。
3]当一个人X爱别人,而另一个人喜欢别人等等直到该链中的某个人爱X时,就会存在一个爱的圈子。假设只有一个爱的圈子存在,那就写下将会有的爱的规则找到这个圈子并列出所涉及的那些圈子。
我的回答
write_list([X | A,B,C]: -
写(X)
写列表(X,尾)。
答案 0 :(得分:4)
Prolog方式是将每对代表为一个单独的事实;所有相似的事实将形成关系( predicate
)。
因此,您有三个is_Married
个事实和五个loves
个事实。或者六个,包括关于柯特的一个:
is_Married(James,Victoria).
is_Married(Curt,Kylie).
is_Married(Henry,Crystal).
loves(Victoria,Curt). % changed the name
loves(Kylie,Henry).
loves(Arthur,Victoria).
loves(Henry,Victoria).
loves(James,Victoria).
loves(Curt,Kylie).
“如果两个参与者都浪漫地倾向于其他人,而不是彼此,那么marri [年龄]就会岌岌可危。”这是从英语到Prolog的直接翻译:
on_the_rocks(A,B):- % a pair of people, whose marriage is on the rocks
is_Married(A,B),
loves(A,C), C \= B,
.....