【发布时间】:2023-03-14 07:40:01
【问题描述】:
所以我试图在 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).
目前它返回的是所有输入都是错误的。我希望这不是严重错误,只需要调整。
干杯
【问题讨论】:
-
看起来,在
factors/3中,TT已经绑定(通过调用)。然后,如果您计算TT1 is N + TT,然后检查统一TT = TT1,那么统一失败,因为TT和TT1可能绑定到不同的值。您的意思是TT = TT1是TT1 is N + TT的替代品吗?在这种情况下,您的->/2表达式和以下统一检查需要“调整”。 -
your friend 是同一个班级吗? Maybe this one 也是?
-
@lurker:做好准备,很快雷神之锤就属于你了。