【发布时间】:2018-11-25 15:32:47
【问题描述】:
我对 prolog 比较陌生,我会尽力解释这一点。假设我有一个小型餐馆知识库,其中包含名称、菜式和价格。
restaurant(spaghetti, italian, 20).
restaurant('naan bread', indian, 30).
...
我有一些人喜欢某些餐厅,例如:
likes(adam, restaurant, italian).
亚当喜欢意大利餐厅的地方。我遇到的主要问题是,如果我进行如下查询:
likes(adam, spaghetti).
或
likes(adam, _, spaghetti).
不管我放什么,它只会出现错误。我做了很多研究,但似乎无法让它发挥作用 - 因为我对 prolog 很陌生,所以我不太了解它。我看过诸如 Clocksin 和 Mellish 的“Prolog 编程”之类的书以及各种网站,但我似乎找不到答案或我理解的答案。
【问题讨论】:
-
你可以构造一个谓词来调用
restaurant和likes这两个谓词,有点类似于JOIN在SQL中的工作方式。 -
你从哪里得到这个问题的?是来自书本还是课堂?数据库中可能还有更多事实,您需要在此处将它们全部列出,以便我们为您提供帮助。
-
您可能需要添加一条规则,例如
likes(X, Dish) :- likes(X, restaurant, Cuisine), restaurant(Dish, Cuisine, _).Prolog 不是读心术,它无法在没有您告知的情况下判断某人喜欢某道菜,因为他们喜欢某道菜。 -
@GuyCoder 是的,它来自一个班级,但它只是一个餐馆知识库。所以没有任何其他规则。
标签: prolog