1
私はプロローグで入力を取り、それが完全な数であるかどうかを返す方法を考えています。現在、私は近くにいるが、なぜ私が望むように動作していないのか理解できない。 私は再帰によってこれに近づいています。 X%N == 0の場合、NとTT(合計)が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).
現在、すべての入力が虚偽であることを返します。私はこれが主に間違っているわけではなく、微調整するだけでよいことを願っています。ここで
乾杯
に役立ちます願っています。次に、 'TT1 is N + TT'を計算して統一をチェックすると、' TT = TT1'は 'TT'と' TT1'が別の値にバインドされる可能性があるため、統一は失敗します。 'TT1 is N + TT'の代わりに' TT = TT1'を意味しましたか?あなたの ' - >/2'式とそれに続く統一チェックには"微調整 "が必要です。 – lurker
同じクラスの[あなたの友人](https://stackoverflow.com/questions/47742914/prolog-perfect-number-generation)ですか? [多分この1つ](https://stackoverflow.com/questions/47744880/cant-understand-prolog-line-of-code)? –
@lurker:準備してください、すぐにMjölnirがあなたのものになります。 – false