Создайте список кортежей на основе того, чем является данный элемент другого списка - PullRequest
1 голос
/ 03 апреля 2012

В основном мне удалось создать список кортежей в форме A = [[1,2,3],[1,2,12],[1,2,5]], используя факт makelist(A).

. Теперь я хочу использовать это для создания другого списка.где он содержит только кортежи, которые являются истинными для данного факта.

Например, у меня есть тест, который возвращает истину, если число простое prime(N) (которое принимает число и возвращает истину, если оно простоеЯ хочу использовать это, чтобы сохранить только третьи элементы в A, которые являются простыми.Итак, A = [[1,2,3],[1,2,5]]

Я пытался использовать predsort, но, похоже, это не работает только для одного элемента.Я думал, что это можно сделать с помощью exclude, но я не могу заставить его работать.

Спасибо за любую помощь, вы можете мне помочь.

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

С 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).

Кстати, вы упомянули об использовании exclude/3: эти решения точно такие же, как и его использование, только они используют его двойной предикат, include/3.

0 голосов
/ 03 апреля 2012
% 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).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...