Mezclar en prólogo

Estoy tratando de escribir un procedimiento en prolog donde si L1 = [1,2,3] y L2 = [4,5,6] luego L3 = [1,4,2,5,3,6]

tan shuffle([1,2,3],[4,5,6],[1,4,2,5,3,6])

Tengo esto hasta ahora:

 shuffle([X],[Y],[X,Y]). shuffle([X|Xs],[Y|Ys],_) :- shuffle(Xs,Ys,Z), shuffle(X,Y,Z). 

Este es mi primer bash de escribir código de prólogo, así que todavía estoy tratando de entender la syntax, las reglas y todo.

Entiendo la lógica, ¡no estoy seguro de cómo implementarla, así que cualquier ayuda sería muy apreciada!

¡Gracias!

Editar: lo he descubierto. Aquí está la solución si alguien está interesado:

 shuffle([X],[Y],[X,Y]). shuffle([X|Xs],[Y|Ys],[Z1,Z2|Zs]) :- shuffle([X],[Y],[Z1,Z2]),shuffle(Xs,Ys,Zs). 

 shuffle([], B, B). shuffle([H|A], B, [H|S]) :- shuffle(B, A, S). 

En este tipo de problemas, generalmente la parte difícil no es Prolog, sino que identifica la relación recursiva más simple que la resuelve.

Aquí está la solución simple:

 shuffle([], [], []). shuffle([X|Xs], [Y|Ys], [X,Y|Zs]) :- shuffle(Xs,Ys,Zs). 

Generalizar esto para manejar una lista de longitud desigual es una cuestión de cambiar el caso base a:

 shuffle(Xs, [], Xs). shuffle([], Ys, Ys). 

aunque eso puede generar soluciones duplicadas. Esos pueden corregirse con un corte si no le importa que el predicado sea “unidireccional”.

(Aunque todavía creo que deberías llamar a este flatzip o interlace lugar de shuffle ).