取一个正整数n,生成一个列表,在prolog中打印出一个列表?
我正在尝试编写一个prolog规则,以获取正整数n,并返回一个从n到0倒计时的列表,包括负数。所以螺旋下降(4,L)将返回L=[4,-4,3,-3,2,-2,1,-1,0]。我让它返回正值,但不能让它返回负值取一个正整数n,生成一个列表,在prolog中打印出一个列表?,prolog,Prolog,我正在尝试编写一个prolog规则,以获取正整数n,并返回一个从n到0倒计时的列表,包括负数。所以螺旋下降(4,L)将返回L=[4,-4,3,-3,2,-2,1,-1,0]。我让它返回正值,但不能让它返回负值 ruleOne(-1,[]). ruleOne(X,[H|T]) :- Y is X-1, H=X, ruleOne(Y,T). 这是一种有缺陷的解决方案,但它将为您指明正确的方向,我希望: spiral_down(N, [N, Minus_N|Rest])
ruleOne(-1,[]).
ruleOne(X,[H|T]) :-
Y is X-1,
H=X,
ruleOne(Y,T).
这是一种有缺陷的解决方案,但它将为您指明正确的方向,我希望:
spiral_down(N, [N, Minus_N|Rest]) :-
succ(N0, N),
Minus_N is -N,
spiral_down(N0, Rest).
spiral_down(0, [0]).
这里有一个解决方案:
spiral_down(Hi,Ns) :-
integer(Hi) ,
Hi >= 0 ,
Lo is -Hi ,
spiral_down(Hi,Lo,Ns)
.
spiral_down( Hi , Hi , [Hi] ) .
spiral_down( Hi , Lo , [Hi|Ns] ) :-
Hi > Lo ,
H1 is Hi-1 ,
spiral(H1,Lo,Ns)
.
还有一个:
spiral_down( 0 , [] ) .
spiral_down( M , [M,N|Xs]) :-
M > 0 ,
N is -M ,
M1 is M-1 ,
spiral_down( M1 , Xs )
.
对于负值,请尝试
减N为-N
。考虑使用<代码> SUCC/2 进行计数,如<代码> SUCC(N0,N) >其中N被实例化为非负整数。