本文介绍了扁平化列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要编写一个扁平化列表的函数.
I need to write a function that flat a list.
例如:
flat([ c , [[[]]] , [] , k] , X).
X=[c,k]
这就是我所做的:
flat([],[]).
flat([[A] |B] , R) :- flat([A|B],R).
flat([[]|L],L1) :- flat(L,L1).!
flat([[A|L]|W],R) :- flat([A|L],U), flat(W,W1), append(U,W1,R).
flat([A|L], [A|L1]) :- flat(L,L1).
我知道为什么这不是真的,但我不知道该怎么做.谢谢.
I know why it is not true but I do not know how to do that.thanks.
几乎工作:
flat([],[]).
flat([[]|L],L1) :- flat(L,L1). --- i think something here missing
flat([[A|L]|W],R) :- flat([A|L],U), flat(W,W1), append(U,W1,R).
flat([A|L], [A|L1]) :- flat(L,L1).
?- flat([c , [[[]]] , [] , k],C).
C = [c, k] ;
C = [c, [], k] ;
C = [c, [], k] ;
C = [c, [], [], k] ;
C = [c, [[]], k] ;
C = [c, [[]], [], k] ;
C = [c, [[[]]], k] ;
C = [c, [[[]]], [], k].
推荐答案
代码已编辑(见评论)
另一种可能,使用 DCG :
Another possibiliy, using DCG :
flat(L, FL) :-
flat(L, FL, []).
flat(X) -->
{var(X)},
!,
[X].
flat([]) -->
[],
!.
flat([X | T]) -->
flat(X),
!,
flat(T).
flat(X) --> [X].
现在我们得到:
?- flat([[a,b,c,d|r]], FL) .
FL = [a,b,c,d,r] .
?- flat([1,2,[3,4]],L).
L = [1,2,3,4] .
?- flat([1,2,[3,4]],[1,2,3,4]).
true .
?- flat([ c , [[[]]] , [] , k] , X).
X = [c,k] .
这篇关于扁平化列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!