我正在尝试生成一个列表,例如
[X1/1,X2/2,X3/3....Xn/N] with given N.
我尝试制作一个maketemplate(N,L)
函数N
,并返回L
的列表Xn/N
,其中Xn
是第N个变量,N
是一个整数。
作为一个更简单的示例,我最初尝试使用给定[1,2,3...N]
制作N
的列表,但我甚至无法使其工作。
mysolution(L,N,N).
mysolution([I|Rest],I,N):-
I < N,
I is I+1,
mysolution(Rest,I+1,N).
如何在prolog中模拟类似for循环的操作?
答案 0 :(得分:0)
不要再想法了。失败循环是Prolog的方法:
seq(From,_,From).
seq(From,To,X) :-
From<To,
Next is From+1,
seq(Next,To,X).
loop :-
seq(1,10,Index),
do_something(Index),
fail.
loop.
do_something(Index) :-
display(Index),nl.
故障循环具有以下asbtract结构:
loop:-
generate(X),
do_something(X),
fail.
loop.
答案 1 :(得分:0)
我刚才创建列表的类似示例包含一个具有一定数量的随机元素,它可能满足您有关从内部递归获取动态值并将其用于递归之外的需求(已按注释中的内容更正):
create_list(0,X):- !, X=[].
create_list(_size,X):-
_size>0,
_last_size is _size-1,
create_list(_last_size,Y),
random(0,9,_random),
X=[_random|Y].
有一些经验:
Y
和X
。存在不同变量的地方应该相同,递归后更改值,一遍又一遍地执行 Unification 以获得内在值。我经常使用序言进行研究,如果您对项目开发更感兴趣,不要认为循环可能是更好的选择。