【发布时间】:2015-01-27 23:35:55
【问题描述】:
我是 Prolog 的新手,我正在尝试编写一个谓词 goodveggies(X,Y) 以便代码按以下方式运行:
?- goodveggies(broc,spinach).
true.
?- goodveggies(X,artichoke).
X = broc
我尝试过的:
% Define the facts:
goodveggies(broc,spinach).
goodveggies(broc,artichoke).
% Now make the predicate.
goodveggies(X,Y) :- goodveggies(X,Y).
我的程序运行良好,但我遇到的问题是我的程序在我输入 goodveggies(broc, tomato). 之类的内容时崩溃我不明白如何过滤掉我不想要的结果以便程序正常运行。
【问题讨论】:
-
goodveggies(X,Y) :- goodveggies(X,Y).是非常直接的自我引用。它说如果X和Y是好蔬菜,那么X和Y是好蔬菜。无限循环。你想用这条规则说什么?goodveggies有两个参数在语义上意味着什么? -
@lurker:我认为他想维护一个良好组合蔬菜的数据库。
-
@lurker: 或者 OP 不熟悉 最小世界假设。
-
@CommuSoft 目前,我倾向于您的第一个理论。 :)
-
@lurker:“或”不是唯一的,毕竟我们说的是序言;)
标签: prolog