-3

Prolog 谓词- 基于此,问题不够清晰,所以我在上下文中发布问题。

这是问题,我将发布到目前为止我所做的事情以及我正在努力的事情。

情景(一个安静怪异的情景)

詹姆斯和维多利亚结婚了,但维多利亚爱上了柯特。柯特不爱她,因为他仍然与凯莉结婚并关心凯莉,尽管她对亨利更感兴趣。亚瑟在浪漫上倾向于维多利亚,但他与亨利竞争,亨利虽然与克里斯托结婚,但他也爱维多利亚,詹姆斯对她感到浪漫。

1] 使用 Prolog 谓词表示此信息。仅使用两个谓词名称。

这是我对此的解释

is_Married([James,Victoria],[Curt,Kylie],[Henry,Crystal])。

is_inLove([Victoria,Curt],[Kylie,Henry],[Arthur,Victoria],[Henry,Victoria],[James,Victoria])。

对于第二个谓词,我也不确定是否应该将 [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,尾巴)。

4

1 回答 1

4

Prolog 的方式是将每一对表示为一个单独的事实;所有相似的事实将形成关系predicate)。

所以你有三个is_Married事实,五个loves事实。或者六个,包括关于 Curt 的那个:

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).

“如果双方都在浪漫上倾向于其他人,而不是彼此,那么婚姻[年龄]就岌岌可危了。” 这是从英语到 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,
   .....
于 2013-05-15T14:19:59.457 回答