3

私は現在、Prolog で単純な「peano 整数を乗算する」問題を解決しようとして気が狂いそうになっています。

基本的なルール

  • ペアノ整数は次のように定義されます: 0 -> 0; 1 -> s(0); 2 -> s(s(0)) s(s(s(0) -> 3 など。
  • この関係は次のように定義されます: 乗算(N1,N2,R)
    • どこ
      • N1 は最初の peano 整数 (つまり、s(s(0)) のようなもの) です。
      • N2 は 2 番目のペアノ整数 (つまり、s(s(0)) のようなもの) です。
      • R は、結果の新しいペアノ整数です (s(s(s(s(0))) など)

Prolog がデフォルトで基本的な算術ロジックを提供することは承知していますが、peano 整数を使用して基本的な算術ロジックを実装しようとしています。

乗算は基本的に足し算の繰り返しなので、次のようになると思います。

プロローグの試み

%Addition
% Adds two peano integers 3+2: add(s(s(s(0))),s(s(0)),X). --> X = s(s(s(s(s(0)))))
add(X,0,X).
add(X,s(Y),s(Z)) :- add(X,Y,Z).

%Loop
%Loop by N
loop(0).
loop(N) :- N>0, NewN is N-1, loop(NewN).

問題は、prolog で係数に基づいてループを N 回実行し、peano 整数を追加して正しい結果を構築する方法が思い浮かばないことです。これはかなり簡単に達成でき、結果として得られるコードはおそらく数行のコードよりも長くはならないと確信しています。私は何時間もこれを達成しようとしてきましたが、それは私を怒らせ始めています.

ご協力ありがとうございました。メリークリスマス!

マイク

4

1 に答える 1