Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/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
这个谓词有效吗?这是在我的测验中发现元素X在名为list的数据结构中的位置_List_Data Structures_Recursion_Prolog - Fatal编程技术网

这个谓词有效吗?这是在我的测验中发现元素X在名为list的数据结构中的位置

这个谓词有效吗?这是在我的测验中发现元素X在名为list的数据结构中的位置,list,data-structures,recursion,prolog,List,Data Structures,Recursion,Prolog,例如: 位置(1,列表(1,列表(2,无)),Z. Z=1。 位置(3,列表(1,列表(2,列表(3,无)),Z)。 Z=3。 其中Z是元素X在上述格式的列表数据结构中的位置 以下是我的解决方案: position(X,list(nil),0). %empty list position(X,list(X,T),1). %list with X as head or first element po

例如: 位置(1,列表(1,列表(2,无)),Z.
Z=1。 位置(3,列表(1,列表(2,列表(3,无)),Z)。 Z=3。 其中Z是元素X在上述格式的列表数据结构中的位置

以下是我的解决方案:

      position(X,list(nil),0).                %empty list
      position(X,list(X,T),1).                %list with X as head or first element 
      position(X,list(H,T),Z):-
                             position(X,list(T,nil),Z1), %X is in tail of list (H,T)
                             Z is Z1 + 1.
不,不行。 正确的谓词是:

position(X,list(nil),0).                %empty list
position(X,list(X,T),1).                %list with X as head or first element
position(X,list(H,T),Z):-
                position(X, T, Z1), %X is in tail of list (H,T)
                Z is Z1 + 1.

写入
位置(X,list(T,nil),Z1),%X位于list(H,T)的尾部
将导致循环,这是一个逻辑错误,因为没有理由使用
列表(T,nil)调用
位置
T
已经是一个列表或者是
nil
原子。

是的,当然在逻辑上是有意义的错误,但这不等于位置(X,[],0)。位置(X,[X | T],1)。位置(X,[H,T],Z):-位置(X,T,Z1),Z是Z1+1。对于prolog中预定义的列表结构。@andrapier