我正在尝试自学一些Prolog,以便我能够确定它是否适合解决我遇到的问题。基本上问题是,给定一系列关于项目之间交互的规则,确定哪些项目可用,不可用,已选择和未被选中。
但即便是最简单的部分,我也失败了!我大大减少了问题的大小,只是为了看看我能做些什么。以下是我的知识库:
selected(A) :- implied(A).
implied(B) :- implies(A,B),selected(A).
implied(option_one).
implies(option_one,option_two).
当我查询时:
selected(X).
我只回来了option_two。
似乎有一些非常基本的东西,我在这里不理解,但在我看来,如果option_one也应该回到该列表中(特别是因为其中一个事实是'隐含的(option_one)'。 / p>
如果重要的话,我已经尝试使用P#和SWI-Prolog,它们会得到相同的结果。
答案 0 :(得分:3)
当您第一次回答X = option_two
时,请按; 以获得下一个回答
?- selected(X).
X = option_two ;
X = option_one.
或者你可以使用这样的smth来显示所有匹配的东西:
?- selected(X), writeln(X), fail.
option_two
option_one
false.