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

时间:2015-05-18 07:52:11

标签: prolog

我正在尝试编写一个prolog规则来获取一个正整数n并返回一个从n到0倒计时的列表,包括负数。因此,spiralDown(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).

2 个答案:

答案 0 :(得分:1)

这是尝试解决方案存在缺陷,但我希望能指出正确的方向:

spiral_down(N, [N, Minus_N|Rest]) :-
    succ(N0, N),
    Minus_N is -N,
    spiral_down(N0, Rest).
spiral_down(0, [0]).

答案 1 :(得分: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 )
  .