Prolog - 列出K成员

时间:2015-03-19 05:01:03

标签: prolog

 listMem(L, K, LK): LK is the list L with element K inserted in it somewhere. 

我在编写此函数时遇到问题,但我的尝试是这样的: 我的想法是将K添加到L,然后对其进行排序并检查它是否与LK相同,不幸的是它不能很好地工作。我对使用append谓词感到怀疑。

 listMem(L, K, LK) :- append(L, K, Y), sort(Y, LK).  

1 个答案:

答案 0 :(得分:1)

因为你似乎错过了一个函数和一个Prolog谓词之间的区别:

?- select(E, [a,b,c], L).
E = a,
L = [b, c] ;
E = b,
L = [a, c] ;
E = c,
L = [a, b] ;
false.

?- select(x, L, [a,b,c]).
L = [x, a, b, c] ;
L = [a, x, b, c] ;
L = [a, b, x, c] ;
L = [a, b, c, x] ;
false.

?- select(x, [a,b,c], L).
false.

从某种意义上说,"选择"一句话意味着比select/3更少,但正如CapelliC指出的那样,你所寻找的确实是select/3。您可以在任何Prolog教科书或check out the library implementation of an open-source Prolog implementation中看到它是如何实现的。