基本上我设法做的是使用事实A = [[1,2,3],[1,2,12],[1,2,5]]
以makelist(A)
形式创建元组列表。
我现在要做的是使用它创建另一个列表,其中只包含对于给定事实为真的元组。
例如,我有一个测试,如果一个数字是素数prime(N)
(它取一个数字,如果它是素数则返回true),则返回true我想用它来保留A中的第三个元素是素数。所以A = [[1,2,3],[1,2,5]]
我尝试使用predsort
,但这似乎不适用于一个元素。我认为可以使用exclude
来完成,但我似乎无法让它工作。
感谢您提供任何帮助。
答案 0 :(得分:1)
使用lambda.pl,您可以写:
:- [lambda].
filter_third_prime(Lists, Result) :-
include(\[_, _, X|_]^prime(X), Lists, Result).
没有它,你可以写:
filter_third_prime2(Lists, Result) :-
include(third_is_prime, Lists, Result).
third_is_prime([_, _, X|_]) :-
prime(X).
BTW,你提到使用exclude/3
:这些解决方案完全相同,只使用它的双谓词include/3
。
答案 1 :(得分:0)
% Assumes notPrime(N) is true iff N isn't prime
thirdPrimes([],[]).
thirdPrimes([A|B],[A|BP]) :- A=[_,_,N|_],prime(N),thirdPrimes(B,BP).
thirdPrimes([[_,_,N|_]|B],BP) :- notPrime(N),thirdPrimes(B,BP).