最近我正在做一个程序,它要求我将元组转换为列表。
组合看起来像这样:[(1,[1,2,3,4]), (1,[2,3,4,5]), ...]
我想要的是以下列表:[(1,2,3,4), (2,3,4,5), ...]
有什么办法可以做到吗?
答案 0 :(得分:0)
在Prolog中,(1, 4, 2, 5)
是(1, (4, (2, 5)))
的语法糖,就像[1, 4, 2, 5]
是[1|[4|[2|[5|[]]]]]
的语法糖(但是请注意,列表以空列表{ {1}},而对于一个元组,它以[]
结尾。
(2, 5)
因此,我们可以编写一个谓词以将列表从2元组中解包出来,并将列表转换为元组:
list_tuple([A, B], (A, B)).
list_tuple([A|T], (A, B)) :-
list_tuple(T, B).
,我们可以使用maplist/3
对整个列表进行转换:
conv((_, L), R) :-
list_tuple(L, R).
然后产生:
convlist(As, Bs) :-
maplist(conv, As, Bs).
但是,序言在Prolog中不是很常见,因此我不明白为什么您不坚持列表本身。