取一个正整数n,生成一个列表,在prolog中打印出一个列表?

取一个正整数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])

我正在尝试编写一个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]) :-
    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被实例化为非负整数。