我正在解决一个问题,只能在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).
答案 0 :(得分:1)
你需要3个简单的条款,我只会展示最复杂的条款
flat([H|T],R) :- is_list(H), flat(T,T1), append(H,T1,R).
其他两个子句是基本递归的情况,而copy as is
的结果是。{/ p>
你还应该在我已经显示的条款中加以限制,否则在回溯中你会得到错误的结果(由于条款copy as is
被解雇)