简单Prolog程序
我试着教自己一些序言,这样我就可以确定它是否适合解决我遇到的问题。本质上,问题是,给定一系列关于项目之间交互的规则,确定哪些项目可用、不可用、选中和未选中 但我连最简单的部分都不及格!我大幅缩小了问题的规模,只是为了看看我能做些什么。以下是我的知识库:简单Prolog程序,prolog,Prolog,我试着教自己一些序言,这样我就可以确定它是否适合解决我遇到的问题。本质上,问题是,给定一系列关于项目之间交互的规则,确定哪些项目可用、不可用、选中和未选中 但我连最简单的部分都不及格!我大幅缩小了问题的规模,只是为了看看我能做些什么。以下是我的知识库: selected(A) :- implied(A). implied(B) :- implies(A,B),selected(A). implied(option_one). implies(option_one,option_two). 当
selected(A) :- implied(A).
implied(B) :- implies(A,B),selected(A).
implied(option_one).
implies(option_one,option_two).
当我询问:
selected(X).
我只有两个选择
这里似乎有一些非常基本的东西我不理解,但在我看来,如果选项一也应该回到列表中(特别是因为其中一个事实是“隐含的(选项一)”
如果有必要的话,我已经用p#和SWI Prolog尝试过了,它们给出了相同的结果。当你有第一个答案
X=option\u two
按;得到下一个答案
?- selected(X).
X = option_two ;
X = option_one.
或者,您可以使用类似的smth来显示所有匹配的内容:
?- selected(X), writeln(X), fail.
option_two
option_one
false.
哇…我现在觉得自己真的很笨。我知道它一次只能给出一个结果,但出于某种原因,我认为再次按Enter键会让它给出下一个结果。没关系。顺便说一句,有很多方法可以得到你想要的。
findall(X,selected(X),List)
在最近的SWI版本中,你也可以按空格键获取更多解决方案。