首页 > 解决方案 > 如何在不使用追加的情况下在 Prolog 中连接 3 个列表

问题描述

我知道如何在不附加的情况下连接 2 个列表,但是你将如何在不附加的情况下连接 3 个列表。

标签: prolog

解决方案


您可以将您的catenate函数折叠到列表列表中。

list_list_catenate([E],   L, [E|L]).    %// [4]   cat [a,b,c] is [4,a,b,c]
list_list_catenate([H|T], L, Cat) :-    %// [4,5] cat [a,b,c] is [4|(5 cat [a,b,c])]
    list_list_catenate(T, L, TCat),
    Cat = [H|TCat].


Lists = [[1,2,3], [4,5,6], [7,8,9]],
reverse(Lists, RevLists),
foldl(list_list_catenate, RevLists, [], Result).

向左折叠是函数式编程语言中常见的循环结构,它将每个列表项与上一次的结果一起推送到帮助程序中,因此它们聚合在一起。

这需要一个reverse因为 foldl 将参数映射到助手的方式;没有那个,[1,2,3], []然后就[4,5,6], [1,2,3]过去了[7,8,9], [4,5,6,1,2,3]


推荐阅读