将两个列表与prolog中确定的值连接起来

将两个列表与prolog中确定的值连接起来,prolog,Prolog,所以我刚刚尝试了Prolog,在这里,我想尝试制作我自己的连接函数,它结合了两个列表(第一个列表首先包含X元素,然后第二个列表包含Y元素)。我尝试使用递归,但是在我尝试了一些查询之后,它给出了否定的答案。 这是我的密码 /* These two functions are already correct, I checked it and it cannot be changed anymore */ push(Element,[], Result) :- Result = [Element]

所以我刚刚尝试了Prolog,在这里,我想尝试制作我自己的连接函数,它结合了两个列表(第一个列表首先包含X元素,然后第二个列表包含Y元素)。我尝试使用递归,但是在我尝试了一些查询之后,它给出了否定的答案。 这是我的密码

/* These two functions are already correct, I checked it and it cannot be changed anymore */

push(Element,[], Result) :- Result = [Element], !.
push(Element,Queue,Result) :- [Head|Tail] = Queue, push(Element, Tail, Tail2), Result = [Head|Tail2].

pop(Queue,Result) :- [_|Tail] = Queue, Result = Tail.

/* concatenate */
concatenate(_,_,0,0,Result) :- Result = [], !.
concatenate(FList,SList,0,Y,Result) :- pop(SList,B), push(B,Result,Result), [_|Tail] = SList, Z is Y-1, concatenate(FList,Tail,0,Z,Result).
concatenate(FList,SList,X,Y,Result) :- pop(FList,A), push(A,Result,Result), [_|Tail] = FList, Z1 is X-1, concatenate(Tail,SList,Z1,Y,Result).

/* Query */
| ?- concatenate([1,2,3],[2,3,4],1,2,R).
no
我认为这里的推动部分给出了错误的结果,但可能还有其他部分。
有人能指导或帮助我解决这个问题吗?

附加([a,b],[1,2],L)有什么问题吗?它给出了L=[a,b,1,2]?它首先合并第一个列表,直到它为空,然后合并第二个列表。嗨,彼得。我尽量不使用prolog中的预定义函数,只是为了练习函数本身背后的逻辑。此外,我还编辑了问题中一些看起来模棱两可的部分。希望现在清楚了。3和4在做什么?如果你想练习,这不是方法。你在一个新的/不同的范例中使用你的旧习惯。这是一种启动Prolog的糟糕方式。
pop(Queue,Result) :- [_|Tail] = Queue, Result = Tail.

push(Element,[], Result) :- Result = [Element], !.
push(Element,Queue,Result) :- [Head|Tail] = Queue, push(Element, Tail, Tail2), Result = [Head|Tail2].

concatenate(_,_,0,0,Result) :- Result = [], !.

concatenate(FList,SList,0,Y,Result) :- [Head|Tail] = SList, Z is Y-1, concatenate(FList,Tail,0,Z,Result2), Result = [Head|Result2], !.
concatenate(FList,SList,X,Y,Result) :-  [Head|Tail] = FList, Z1 is X-1, concatenate(Tail,SList,Z1,Y,Result2), Result = [Head|Result2].```