我正在尝试编写一个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).
答案 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 )
.