В Прологе (1, 4, 2, 5)
- синтаксический сахар для (1, (4, (2, 5)))
, точно так же, как [1, 4, 2, 5]
- синтаксический сахар для [1|[4|[2|[5|[]]]]]
(однако обратите внимание, что список заканчивается пустым списком []
, тогда как для кортежа,это заканчивается (2, 5)
).
list_tuple([A, B], (A, B)).
list_tuple([A|T], (A, B)) :-
list_tuple(T, B).
Итак, мы можем написать предикат для распаковки списка из 2-х кортежей и преобразования его в кортеж:
conv((_, L), R) :-
list_tuple(L, R).
и мы можем использовать maplist/3
для выполнения преобразования по всему списку:
convlist(As, Bs) :-
maplist(conv, As, Bs).
В этом случае получается:
?- convlist([(1,[1,2,3,4]), (1,[2,3,4,5])], R).
R = [(1, 2, 3, 4), (2, 3, 4, 5)] ;
false.
Однако в Прологе нет кортежейочень часто, поэтому я не понимаю, почему вы не придерживаетесь самого списка.