2013-05-08 7 views
2

Итак, мне нужно создать предикат, unzip (L, R, P), где P - список пар (пример: P = [[1,2], [3,4 .]] L должен быть новый список, который содержит первый элемент из каждой пары, а R представляет собой новый список, содержащий второй элемент из каждой парыПролог: распаковать список пар

Вот что у меня есть.:

unzip([],[],[]). 
unzip([H1|T1],[H2|T2],[HL,HR|T]) :- 
    H1 = HL, 
    H2 = HR, 
    unzip(T1,T2,T). 

Этих работает, если количество пар нечетное. Я не вижу, как это может быть из-за каких-либо советов?

РЕДАКТИРОВАТЬ: Придумал. Вот мое решение, если кому-то интересно:

unzip([],[],[]). 
unzip([H1|T1],[H2|T2],[[HL,HR]|T]) :- 
    H1 = HL, 
    H2 = HR, 
    unzip(T1,T2,T). 
+3

Вы можете сделать это ответ и принять его. Вы могли бы помочь кому-то позже. – joneshf

+2

Обратите внимание, что вы написали также 'zip' – false

ответ

5

Ваше решение является правильным, но вы можете и должны использовать объединение в голове:

unzip([], [], []). 
unzip([L|Ls], [R|Rs], [[L,R]|Ps]) :- unzip(Ls, Rs, Ps). 
Смежные вопросы