首页 > 解决方案 > Prolog 中的扁平化列表

问题描述

如何在 Prolog 中展平列表,例如:


    from A = [["a","b"],["c"]]
    to B = ["a", "b", "c"] ?

标签: listprologflatten

解决方案


可以通过以下方式使用 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"].

推荐阅读