在prolog中合并2个嵌套列表

时间:2017-12-07 19:54:34

标签: prolog

我正在尝试将两个嵌套列表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]]] 

对我来说最棘手的部分是保持结构。

提前致谢!

1 个答案:

答案 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(_,[],[]).