在Prolog中仅展平列表的一个级别

时间:2014-12-03 03:13:06

标签: list prolog flatten

我正在解决一个问题,只能在Prolog中压缩列表的一个级别。例如,[[1],[2,3]]将变为[1,2,3],但[[1,[2]],3]只会变为[1,[2],3]。我在网站上经历了一些其他问题,但没有人完全回答这个问题,我只是无法让我的代码处理我的所有测试用例。

更新:代码有效!这是我来到的最终答案:

my_flatten([], []).
my_flatten([A|B],L) :- is_list(A), my_flatten(B,B1), !, append(A,B1,L).
my_flatten([A|B],[A|B1]) :- my_flatten(B,B1).

1 个答案:

答案 0 :(得分:1)

你需要3个简单的条款,我只会展示最复杂的条款

flat([H|T],R) :- is_list(H), flat(T,T1), append(H,T1,R).

其他两个子句是基本递归的情况,而copy as is的结果是。{/ p>

你还应该在我已经显示的条款中加以限制,否则在回溯中你会得到错误的结果(由于条款copy as is被解雇)