我有一个 Prolog 函数,它必须接受一个列表(可能包括子列表)并返回一个所有内容都加倍的列表。
例如,
?- doubleAll([1,2,[3,4],5,[6,7,[8],9],10), L).
L = [2,4,[6,8],10,[12,14,[16],18],20).
当列表中没有子列表时,我能够将所有内容加倍,但是当包含子列表时,我遇到了一些问题。到目前为止,这是我的代码:
%L2 是 L1 中所有内容翻倍的结果。
doubleEverything([],[]).
doubleEverything([H|T], [H2|T2]) :-
atomic(H), H2 is H*2, doubleEverything(T,T2).
doubleEverything([H|T], [H2|T2]) :-
not(atomic(H)), H2 is H*2, doubleEverything(T,T2), doubleEverything(H,T2).
有谁知道我怎样才能做到这一点?
谢谢!