Prolog 序言:追加在循环内失败
我有以下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_函数
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],