我想在Prolog中打印一个数字的除数,我编写了以下代码:
find_and_display_divisors(N) :-
write('Divisors of '), write(N), write(':'), nl,
find_divisors(N, 1).
find_divisors(N, D) :-
D =< N,
0 is N mod D,
write(D), write(' '),
NextD is D + 1,
find_divisors(N, NextD).
find_divisors(_, _).
我遇到的问题是,当我用 find_and_display_divisors(8) 调用我的程序时,它只打印 1 2 true;但是,它缺少其他值,例如 4 和 8。我缺少什么?
谢谢
你不需要递归来解决这个问题。您正在从 1 数到 N:
?- _N = 8, between(1, _N, Div), 0 =:= _N rem Div.
Div = 1 ;
Div = 2 ;
Div = 4 ;
Div = 8.
并且不要使用 is/2 进行比较,而使用 =:=/2。它会让你大吃一惊:
?- 1 =:= sin(pi/2).
true.
?- 1 is sin(pi/2).
false.