根据另一个列表的给定元素创建元组列表

时间:2012-04-03 11:12:35

标签: lambda prolog tuples primes nested-lists

基本上我设法做的是使用事实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来完成,但我似乎无法让它工作。

感谢您提供任何帮助。

2 个答案:

答案 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).