Prolog 序言:追加在循环内失败

Prolog 序言:追加在循环内失败,prolog,Prolog,我有以下Prolog代码: my_function(A):- my_function(A,[],1). my_function(A,List,Num):- Num_new is Num+1, generateL(O,S,L), write(L),nl, %append(L,List,List_New), ( Num_new < 20 -> my_function(A,List_New,Num_new) ). my_函数(A):- my_函数

我有以下Prolog代码:

my_function(A):-
   my_function(A,[],1).

my_function(A,List,Num):-
   Num_new is Num+1,
   generateL(O,S,L),
   write(L),nl,
   %append(L,List,List_New),
   (  Num_new < 20 -> my_function(A,List_New,Num_new)  ).
my_函数(A):-
my_函数(A,[],1)。
my_函数(A、List、Num):-
Num_new是Num+1,
发电机(O、S、L),
写(L),nl,
%附加(L,列表,列表新),
(Num_new<20->my_函数(A,List_new,Num_new))。
这是有效的。它循环19次,调用
generateL
,生成一个新的术语
L
,我将其打印到屏幕上

现在,我希望在每次迭代中将
L
附加到列表
list
中,以创建一个新的列表
list\u new
,然后作为
list
在递归循环中传递,这样在下一次迭代中,这就是
L
再次附加到的列表

我试图通过编写上面注释掉的
append
语句来实现这一点。问题是这个语句失败了——我认为这是因为
List\u New
不被视为变量,而是作为一个预先存在的列表,因此append正在测试
List\u New
是否确实是
L
List
一起追加的,而不是创建一个新的列表
List\u New


有没有办法解决这个问题?谢谢

如果L是一个术语,您可以替换:

 %append(L,List,List_New),
与:


当然很简单:)信不信由你,我实际上试过List_New=[L,List],但没有成功,因为它一直在列表中创建列表,在列表中创建列表,等等。但我没有想到这一点。谢谢我不明白。你不能独立于具体的实现来描述你的问题吗?
 List_New=[L|List],