这个谓词有效吗?这是在我的测验中发现元素X在名为list的数据结构中的位置
例如: 位置(1,列表(1,列表(2,无)),Z.这个谓词有效吗?这是在我的测验中发现元素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
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