質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Prolog

Prologは、非手続き型プログラミング言語です。述語論理を使った論理型言語と言われており、自然言語解析や理解、推論などのAIに有効です。エキスパートシステム開発などに用いられています。

再帰

情報工学における再帰とは、プログラムのあるメソッドの処理上で自身のメソッドが再び呼び出されている処理の事をいいます。

受付中

A+B=Cの具体値の列挙

grape_ll
grape_ll

総合スコア83

Prolog

Prologは、非手続き型プログラミング言語です。述語論理を使った論理型言語と言われており、自然言語解析や理解、推論などのAIに有効です。エキスパートシステム開発などに用いられています。

再帰

情報工学における再帰とは、プログラムのあるメソッドの処理上で自身のメソッドが再び呼び出されている処理の事をいいます。

0回答

0リアクション

2クリップ

765閲覧

投稿2021/11/03 02:13

###質問内容
???? + ???? = ???? であるような自然数????, ????, ???? の組を具体値ですべて列挙する述語addall(????, ????, ????)を作りたいと思い,以下のように書いたのですが,AとCにしかs()を使えていないので,A=C, B=0でずっと続いてしまい,思うような結果を得ることが出来ません.
この再帰は無限回,深く見てしまうので,この下に何かを書いてBを操作することもできません.
どのようにすれば,Bの値も網羅的に見ていくことが出来ますでしょうか.

###書いたコード

prolog

addall(0,0,0). addall(s(A),B,s(C)):- addall(A,B,C).

###注意事項
ここでの自然数は0を含むこととします.
また,s()は加算を表し,1はs(0),2はs(s(0))のように表します.

###求める実行結果

addall(A,B,C). A = B, B = C, C = 0 ; A = 0, B = C, C = s(0) ; A = C, C = s(0), B = 0 ; A = 0, B = C, C = s(s(0)) ; A = B, B = s(0), C = s(s(0)) ; A = C, C = s(s(0)), B = 0 ; A = 0, B = C, C = s(s(s(0))) ; A = s(0), B = s(s(0)), C = s(s(s(0))) ; A = s(s(0)), B = s(0), C = s(s(s(0))) ; A = C, C = s(s(s(0))), B = 0 ; ...

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Prolog

Prologは、非手続き型プログラミング言語です。述語論理を使った論理型言語と言われており、自然言語解析や理解、推論などのAIに有効です。エキスパートシステム開発などに用いられています。

再帰

情報工学における再帰とは、プログラムのあるメソッドの処理上で自身のメソッドが再び呼び出されている処理の事をいいます。