🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Prolog

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

再帰

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

Q&A

1回答

1501閲覧

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

grape_ll

総合スコア83

Prolog

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

再帰

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

0グッド

2クリップ

投稿2021/11/03 02:13

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

###書いたコード

prolog

1addall(0,0,0). 2addall(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 ; ...

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Cの値を構成するA,Bの組み合わせを求める

以下のadd_combのZが自然数の時、Zを構成するXとYの組み合わせを列挙します。

prolog

1?- [user]. 2|: add_comb(s(X),Y,s(Z)):-add_comb(X,Y,Z). 3|: add_comb(0,Z,Z). 4|: ^D% user://1 compiled 0.03 sec, 2 clauses 5true. 6 7?- add_comb(X,Y,0). 8X = Y, Y = 0. 9 10?- add_comb(X,Y,s(0)). 11X = s(0), 12Y = 0 ; 13X = 0, 14Y = s(0). 15 16?- add_comb(X,Y,s(s(0))). 17X = s(s(0)), 18Y = 0 ; 19X = Y, Y = s(0) ; 20X = 0, 21Y = s(s(0)). 22

prologのappendをヒントにしました。まだ未完成です。Zが連続的の増加するようにすれば完成。

投稿2023/08/17 04:29

編集2023/08/17 15:16
xebme

総合スコア1090

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xebme

2023/08/26 21:48

ペアノ算術とリスト操作の同型性 s(X)とX [H|T]とT 同型とみなせば、リスト操作をペアノ算術に置き換えることができます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問