2012-04-03 4 views
1

기본적으로을 사용하여 A = [[1,2,3],[1,2,12],[1,2,5]] 양식의 튜플 목록을 만드는 것입니다.다른 목록의 주어진 요소가 무엇인지에 기초하여 튜플 목록을 만듭니다.

내가 지금하고 싶은 것은 특정 사실에 해당하는 튜플 만 포함하는 다른 목록을 만드는 것입니다.

예를 들어, 숫자가 소수 인 경우 true를 반환하는 테스트가 있습니다 (숫자를 취하여 소수이면 true를 반환합니다). A를 사용하여 소수 인 A의 세 번째 요소 만 유지하려고합니다. 그래서 A = [[1,2,3],[1,2,5]]

나는 predsort을 사용하려고 시도했지만 단 하나의 요소에서만 작동하는 것처럼 보입니다. 나는 그것이 exclude을 사용하여 끝날 수 있다고 생각했지만, 제대로 작동하지 않는 것 같습니다.

도움을 주셔서 감사합니다.

lambda.pl

답변

1

, 당신이 쓸 수 : 그것없이

:- [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을 사용합니다.

+0

감사합니다 두 번째 정말 도움이 !!! – user1310221

+0

@ user1310221 : 환영합니다. Btw 필터와 맵 같은 함수 프로그래밍 관용구에 익숙하다면 필자는 링크 된'lambda' 라이브러리를 살펴 보길 권합니다. 여러분의 삶을 훨씬 더 쉽게 만들어줌으로써 배우는 가치가 있습니다. – m09

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). 
관련 문제