1

除算を使用せずに階乗関数の逆関数を計算する Prolog プログラムを作成する必要があります。また、「関数の逆関数は必ずしも関数であるとは限らない」というメモも与えられました。私はこれを通常の階乗述語として持っています..

fact(0,1).
fact(N,F) :- N>0, N1 is N-1, fact(N1,F1), F is N * F1.

他の投稿で、引数を切り替えることができるはずだと読んだことがありますが、このバージョンではそうではないようです。誰かが理由を理解するのを手伝ってくれますか?

4

3 に答える 3

2

きれいなリレーショナル ソリューションについては、Prolog の逆階乗を参照してください。

inv_fact(RF, N) :-
   (  between(0,RF,N),
      fact(N,F),
      F >= RF
   -> F = RF
   ;  false
   ).
inv_fact(1, 1).
于 2013-11-12T23:59:37.710 に答える