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).
答案 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中看到它是如何实现的。