我的列表开头有一个未知的零,例如[0,0,0,1,2,2,0,3]。我需要将此列表除去前导零,以便看起来像[1、2、0、3]。
这是我所拥有的:
lead([Head | _], _) :- Head =\= 0.
lead([0 | Tail], _) :-
lead(Tail, Tail).
其输出只是True。读取跟踪表明它正在运行,直到它有一个没有前导零的列表为止,但是答案并没有传播回堆栈。我对Prolog还是很陌生,所以我不知道如何使它做到这一点。
最佳答案
这是一个全方位解决方案:
lead([],[]).
lead([H|T],[H|T]) :-
dif(H,0).
lead([0|T],T2) :-
lead(T,T2).
一些查询:
?- lead([0,0,0,1,2,0,3], L).
L = [1, 2, 0, 3] ;
false.
?- lead(L, []).
L = [] ;
L = [0] ;
L = [0, 0] ;
L = [0, 0, 0] ;
...
?- lead(L0, L).
L0 = L, L = [] ;
L0 = L, L = [_G489|_G490],
dif(_G489, 0) ;
L0 = [0],
L = [] ;
L0 = [0, _G495|_G496],
L = [_G495|_G496],
dif(_G495, 0) ;
L0 = [0, 0],
L = [] ;
L0 = [0, 0, _G501|_G502],
L = [_G501|_G502],
dif(_G501, 0) ;
L0 = [0, 0, 0],
L = [] ;
...
编辑此谓词实际上不适用于例如
lead(L0, [0,1,2])
。关于list - 删除Prolog列表中的前导零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39799115/