prolog - 如何在不使用追加的情况下在 Prolog 中连接 3 个列表
问题描述
我知道如何在不附加的情况下连接 2 个列表,但是你将如何在不附加的情况下连接 3 个列表。
解决方案
您可以将您的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]
。
推荐阅读
- javascript - 为什么在这个例子中在 forEach 方法中使用回调函数会给出错误的输出?
- ios - 视频 url 到数据转换给出错误域 = NSCocoaErrorDomain 代码 = 260
- react-native - 在后台使用 react-native-offline
- perl - 使用 for 循环,查找 1-100 之间的质数
- excel - SSIS在postgres数据库中将所有字符串值作为空值插入
- shinydashboard - 在线部署shinyapp多次报错
- c - 我应该如何处理未处理的异常
- go - 无法获得 hashcorp / Vault
- javascript - 无法访问使用 google api 创建的电子表格,它显示为私有
- python - Python矩阵乘法与一系列变量