要在Prolog中列出的元组

时间:2018-09-23 14:22:25

标签: list prolog tuples

最近我正在做一个程序,它要求我将元组转换为列表。

组合看起来像这样:[(1,[1,2,3,4]), (1,[2,3,4,5]), ...]

我想要的是以下列表:[(1,2,3,4), (2,3,4,5), ...]

有什么办法可以做到吗?

1 个答案:

答案 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中不是很常见,因此我不明白为什么您不坚持列表本身。