如何为简单的Prolog数据库制作谓词

时间:2017-09-06 18:59:37

标签: prolog

我有这个数据库,它告诉prolog谁是谁的朋友以及朋友最喜欢的颜色是什么:

*/ has_friend(name, their friend)
has_friend(lisa, mary).
has_friend(john, peter).
has_friend(carl, erin).

*/ has_favourite_colour(their friend, colour)
has_favourite_colour(mary, red).
has_favourite_colour(peter, blue).
has_favourite_colour(erin, green).

我现在要做的是创建谓词" info / 1"它使用名称作为参数然后告诉我他们的朋友是谁以及他们最喜欢的颜色是什么。我该怎么做呢?我基本上很喜欢prolog而且我已经阅读了3本书和各种各样的教程,但我无法弄明白。

1 个答案:

答案 0 :(得分:2)

这些问题在初学者中很常见。关键的见解是,您想在三件事之间描述关系

  1. 一个人
  2. 他们的朋友
  3. 朋友的(我认为)最喜欢的颜色。
  4. 因此,对这种关系使用三个参数(而不是一个)是很自然的。

    一个好的谓词名称有助于以直接的方式写下定义:

    person_friend_colour(Person, Friend, FriendColour) :-
            has_friend(Person, Friend),
            has_favourite_colour(Friend, FriendColour).
    

    这里写的是典型的Prolog规则,即HeadBody的形式。

    因此,我们可以将其视为BodyHead,这可能会更容易一些:如果 FriendPerson的朋友, FriendColour是朋友最喜欢的颜色,然后 person_friend_colour/3适用于这三个实体。

    示例查询:

    ?- person_friend_colour(Person, Friend, FriendColor).
    Person = lisa,
    Friend = mary,
    FriendColor = red ;
    Person = john,
    Friend = peter,
    FriendColor = blue ;
    Person = carl,
    Friend = erin,
    FriendColor = green.
    

    这显示了所有解决方案。

    要获得关系的自然表述,请使用足够数量的参数!

相关问题