Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单Prolog程序_Prolog - Fatal编程技术网

简单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版本中,你也可以按空格键获取更多解决方案。