list - Prolog 中的扁平化列表
问题描述
如何在 Prolog 中展平列表,例如:
from A = [["a","b"],["c"]]
to B = ["a", "b", "c"] ?
解决方案
可以通过以下方式使用 maplist 和 append 来展平列表。
如图所示,可以展平两级列表。
?- A=[["a","b"],["c"]],maplist(append,[A],[B]).
A = [["a", "b"], ["c"]],
B = ["a", "b", "c"].
可以通过两次命令来展平三级。
?- A=[[["a","b"]],[["c"]]],maplist(append,[A],[B]),maplist(append,[B],[C]).
A = [[["a", "b"]], [["c"]]],
B = [["a", "b"], ["c"]],
C = ["a", "b", "c"].
列表中的两个和三个级别的混合会导致两次命令传递的错误。
?- A=[[["a","b"]],[["c"]],["d"]],maplist(append,[A],[B]),maplist(append,[B],[C]).
false.
列表中的两个和三个级别的混合只能通过一次命令进行部分展平。
?- A=[[["a","b"]],[["c"]],["d"]],maplist(append,[A],[B]).
A = [[["a", "b"]], [["c"]], ["d"]],
B = [["a", "b"], ["c"], "d"].
推荐阅读
- wpf - WinForms/WPF 控件的全局唯一标识符?
- web3 - 使用 Web3 读取 LP 池的余额
- anaconda - Pytorch 在 conda 上安装失败,错误为 -CondaHTTPError: HTTP 403 FORBIDDEN for url
- excel - 使用自动过滤器删除行时面临问题
- ruby - 有没有更有效的方法来使用 Ruby 控制控制台光标(马车位置等)?
- elasticsearch - 如何在elasticsearch中索引csv文档?
- ios - SwiftUI - 如何从不同的视图中获取 GeometryReader 的大小/高度?
- swift - SwiftUI 视图到 AppKit 中的 NSImage
- php - 如何从数据库中显示有关性别用户的信息?
- tensorflow - Keras 模型给出了巨大的负值并且模型根本没有训练