所以我试图在 Prolog 中研究如何接受输入,并返回它是否是一个完美的数字。目前我很接近,但无法弄清楚为什么它没有按照我想要的方式工作。我正在通过递归来解决这个问题。如果 X %N == 0,则将 N 和 TT(total) 添加到 TT1。N会减1,函数会被递归调用,直到达到1,然后总数将与输入数字X进行比较。我的代码是:
factors(X,N,TT) :-
( 0 is X mod N -> TT1 is N + TT ),
TT = TT1,
( N > 1 -> N1 is N-1, factors(X, N1, TT1)
; TT1 = X
).
perfect(X) :-
factors(X, X-1, 0).
目前它返回的是所有输入都是错误的。我希望这不是严重错误,只需要调整。
干杯