Как мне создать список пар атомов из двух списков в прологе? - PullRequest
2 голосов
/ 12 октября 2011

Я новичок в прологе. Позвольте мне показать вам, что я хочу ниже в качестве комментария ..

% ?-pair([1,2],[a,b],Result).
% Result= [{1,a},{1,b},{2,a},{2,b}].

и то, что я сделал, это ..

pair([],Q,[]).
pair(P,[],[]).
pair([A|P],[B|Q],[{A,B}|R]) :- pair([A|P],Q,R).
pair([A|P],[B|Q],[{A,B}|R]) :- pair(P,[B|Q],R).

с этим кодом я получаю такой результат:

?- pair([1,2],[a,b],R).
R = [{1, a}, {1, b}] ;
R = [{1, a}, {1, b}, {2, b}] ;
R = [{1, a}, {1, b}, {2, b}] ;
R = [{1, a}, {2, a}, {2, b}] ;
R = [{1, a}, {2, a}, {2, b}] ;
R = [{1, a}, {2, a}] ;
false.

хочу все в одну строку без повторов ..

Ответы [ 2 ]

4 голосов
/ 12 октября 2011

Вы должны объяснить Прологу, что вы хотите (что такое пара, как ее построить), затем попросить Пролог найти все пары.

2 голосов
/ 12 октября 2011

Вы можете сделать это, перечислив все пары A в L1 и B в L2, собрав все пары {A, B} в другом списке:

pair(L1, L2, Pairs):-
  findall({A,B}, (member(A, L1), member(B, L2)), Pairs).

?-pair([1,2],[a,b],Result).
Result = [{1, a}, {1, b}, {2, a}, {2, b}].
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...