我正在尝试将两个嵌套列表L1和L2合并到一个嵌套列表L3中,到目前为止,这就是我所拥有的,它似乎不起作用:
merge(L,[],L).
merge([],K,K).
merge([X|L],[Y|K],[X|M]) :- X < Y, merge(L,[Y|K],M).
merge([X|L],[Y|K],[Y|M]) :- X >= Y, merge([X|L],K,M).
预期行为:
?- merge([2,[2,3],[4,5,[5,6,7]]], [[5,[4,3],[2,1]],6,[7,8]], L3).
L3 = [[10, [8,6], [4,2]], [12, 18], [28, 40, [5, 6, 7]]]
对我来说最棘手的部分是保持结构。
提前致谢!
答案 0 :(得分:0)
这似乎有效:
merge([X|L],[Y|K],[Z|M]) :-
( is_list(X), is_list(Y) ->
merge(X,Y,Z)
; is_list(X) ->
scale(Y,X,Z)
; is_list(Y) ->
scale(X,Y,Z)
; Z is X * Y ),
merge(L,K,M).
merge(L,[],L) :- L \= [].
merge([],K,K) :- K \= [].
merge([],[],[]).
scale(F,[H0|T0],[H|T]) :-
( is_list(H0) ->
scale(F,H0,H)
; H is F * H0 ),
scale(F,T0,T).
scale(_,[],[]).