List 在两个列表之间查找路径

List 在两个列表之间查找路径,list,prolog,List,Prolog,我的任务是读取两个列表并在两个列表之间找到路径的代码部分 但是,我的问题是,如果在第一个列表中找到所需的节点,则读取并返回一个真实的案例。我一直在写我的代码如下 %declare the list circle_line([cc1,cc2,cc3,cc4,cc5,cc6,cc7,cc8,cc9,cc10,cc11,cc12,cc13,cc14,cc15,cc16]). %the predicate that finds the station i need check_for_stati

我的任务是读取两个列表并在两个列表之间找到路径的代码部分

但是,我的问题是,如果在第一个列表中找到所需的节点,则读取并返回一个真实的案例。我一直在写我的代码如下

%declare the list
circle_line([cc1,cc2,cc3,cc4,cc5,cc6,cc7,cc8,cc9,cc10,cc11,cc12,cc13,cc14,cc15,cc16]).   

%the predicate that finds the station i need
check_for_station(A) :- circle_line(X),
            member(A,X),
            write(A),nl.
然后在cosole I中键入:check_for_stationC9

但我得到的答案是否定的。
我有一种感觉,我声明列表是错误的,因为在调试器中,X的值是H135或其他值,它显然不会循环通过每个元素来找到我需要的元素。

正如在Amzi中找到的那样!Prolog经典且不确定的成员/2谓词不是内置的,而是与其他有用的列表操作谓词(如中的length/2)一起提供的。有关列表的内置谓词与库谓词的一些上下文,请参见

如果check_for_station/1仅使用其参数A bound调用,如示例所示,那么Amzis内置的确定性谓词is_member/2将完成这项工作,而且速度更快


这种想法似乎是,非确定性成员/2是一个两行用户定义,提供一个更快的确定性版本,不允许回溯列表中的成员,这是用户不容易为自己提供的。

正如hack在Amzi中发现的那样!Prolog经典且不确定的成员/2谓词不是内置的,而是与其他有用的列表操作谓词(如中的length/2)一起提供的。有关列表的内置谓词与库谓词的一些上下文,请参见

如果check_for_station/1仅使用其参数A bound调用,如示例所示,那么Amzis内置的确定性谓词is_member/2将完成这项工作,而且速度更快


我们的想法似乎是,非确定性成员/2是一个两行用户定义,提供一个更快的确定性版本,不允许回溯列表中的成员,这是用户自己无法轻松提供的。

您使用的是哪种prolog实现?我在swi prolog 5.10.1中试过了,效果很好2?-检查站点C9。cc9 true它也适用于GNU prolog 1.3.0hi,我一直在尝试使用Amzi!序言3.5.9。。。。。我将尝试使用swi-prolog5.10.1下载和编码。。谢谢,伙计们,我不确定这是不是错误,但我在阿兹米做了什么!是加载更多的库,它成功了。。。谢谢你帮我检查代码!您使用的是哪种prolog实现?我在swi prolog 5.10.1中试过了,效果很好2?-检查站点C9。cc9 true它也适用于GNU prolog 1.3.0hi,我一直在尝试使用Amzi!序言3.5.9。。。。。我将尝试使用swi-prolog5.10.1下载和编码。。谢谢,伙计们,我不确定这是不是错误,但我在阿兹米做了什么!是加载更多的库,它成功了。。。谢谢你帮我检查代码!