仅在序言中平整列表的一个级别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仅在序言中平整列表的一个级别相关的知识,希望对你有一定的参考价值。
我正在研究一个问题,以便在Prolog中仅将列表的一个层次展平。例如,[[1],[2,3]]
将变为[1,2,3]
,但是[[1,[2]],3]
仅会变平为[1,[2],3]
。我在网站上遇到了其他一些问题,但是没有一个人彻底回答这个问题,而且我无法让我的代码在我的所有测试用例上都能正常工作。
更新:代码有效!这是我最终来到的answer:
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).
答案
您需要3个简单子句,我将仅显示最复杂的子句
flat([H|T],R) :- is_list(H), flat(T,T1), append(H,T1,R).
另外两个子句是基本递归的情况,以及要生成的head的copy as is
。
您还应该在我显示的子句中插入一个剪切,否则在回溯时,您会得到错误的结果(由于触发了子句copy as is
)
以上是关于仅在序言中平整列表的一个级别的主要内容,如果未能解决你的问题,请参考以下文章