我试图编写一个函数getNumbers(List,Result)
,它List
是一个列表,他的元素可以是整数或列表列表,例如 -
List = [1,[1,2,[3],[4]],2,[4,5]]
List = [1,[1,1,[1],[1]],1,[1,1,[[[[[1]]]]]]]
List = [[4,[[]],2],[[1],[],[1]]]
etc..
并且输出应该是存储在其中的所有数字List
,例如 -
?- getNumbers([1,[1,2,[3],[4]],2,[4,5]],R).
R = [1,2,3,4,5].
?- getNumbers([1,[1,1,[1],[1]],1,[1,1,[[[[[1]]]]]]],R).
R = [1].
?- getNumbers([],R).
R = [].
?- getNumbers([[4,[[]],2],[[1],[],[1]]],R).
R = [1,2,4].
到目前为止,我尝试了以下代码 -
getNumbers([],Result) :- Result=[],!.
getNumbers([H|Rest],Result) :- getNumbers(Rest,NewResultRest),
( atomic(H) ->
Result = [H|NewResultRest]
; getNumbers(H,NewResultHead),Result = [NewResultHead|NewResultRest] ).
但它给出了错误的结果,比如 -
getNumbers([[2],5,7,[3,6,5]],Result).
Result = [[2], 5, 7, [3, 6, 5]].
似乎该函数不排除2
或[2]
任何其他存储在嵌套列表中的数字。
我该如何修复我的实现?