Отдельный список A / B -> B swi-prolog - PullRequest
0 голосов
/ 01 февраля 2011

У меня есть список [2 / 4 , 3 / 6 , 1 / 2 , 7 / 5 ] и яхочу создать список, состоящий только из вторых чисел [ 4 , 6 , 2 , 5 ].

Я думал примерно так:

newlist(L,L2):-
   newlist(L,A/B),
   newlist(A/B,B),
   newlist(B,L2).

Это не сработало, какие-нибудь предложения?

Ответы [ 3 ]

3 голосов
/ 01 февраля 2011

Определение предиката для одного элемента:

pair_to_2nd(_/B, B).

Теперь примените этот предикат к списку:

?- maplist(pair_to_2nd, [2/4, 3/6, 1/2, 7/5], L).
L = [4, 6, 2, 5].
3 голосов
/ 01 февраля 2011
listDenom([ ],[ ]).
listDenom([_/D|T],[D|V]) :- listDenom(T,V).
0 голосов
/ 01 февраля 2011

Вот решение с использованием string_to_list.

splitList(A) :-  
    string_to_list(A, [_,_,_,A1,_,_,_,B1,_,_,_,C1,_,_,_,D1,_]),  
    string_to_list(A2, [A1]),  
    string_to_list(B2, [B1]),  
    string_to_list(C2, [C1]),  
    string_to_list(D2, [D1]),  
    write([A2,B2,C2,D2]).

Пример:

?- splitList('[2/4,3/6,1/2,7/5]').
[4,6,2,5]
true.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...