問題タブ [successor-arithmetics]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
prolog - プロローグが不可能な解決策を無限に調べるのを止める方法は?
次のプログラムを想定します。
2 つの数値を加算する場合はうまく機能しますが、次のようなクエリを実行しようとすると、次のようになります。
Z
解決策がないことが明らかになった後も、可能な値を検索し続けます(つまり、 Z>s(0)
)
私は cut( !
) 演算子に精通しており、私の直感では解決策がそれと関係があると言っていますが、この場合の使用方法がわかりません。
prolog - 自然数の定義で Prolog がたどる手順は何ですか?
私は Prolog でプログラミングする方法を学んでおり、自然数とその和を定義する次のプログラムを見つけました。
(ここにあります)
問題は、このプログラムの実行フローに苦労していることです。実を言うと、私はそれが何をするのかわかりません。Prolog はどのようにして Answer の値を割り出すことができますか? Prolog が Answer の値を見つけるためにたどる手順は何ですか?
前もって感謝します。
prolog - s(0) と p(0) を使用したプロローグ カウント
プロローグ試験のリビジョンの一部に問題があります。
simple/2 と呼ばれる再帰ステートメントを作成する必要があります。使用例は次のとおりです。
その結果、Z
s(0) になります。S は後継者、P は前任者を表します。つまり
s(0)
、 は 1、
s(s(0))
は 2、p(0)
は -1 などで、
p(s(p(p(0))))
になりますp(p(0))
。
私が最初に持っていたコードは
しかし、再帰呼び出し中にそれ自体に追加される変数として 2 番目の部分を保持する必要があるため、これは明らかに機能しません。頭がおかしいので30分くらいしたらまた見てみます。
prolog - 誰かが明確な句の文法で答えを得るために統一を行う方法を説明できますか?
私は明確な句の文法内での統一の概念を理解しようとしています.次のDCGから答えを得る方法を段階的に説明できる人です.
答えは生成aaabbb
されますが、私は何年にもわたってウェブを検索して、この答えを得る方法を見つけようと試みてきました。何が起こっている。
同様の例は、DCG のウィキペディア ページで見つけることができますが、aaabbbccc
.
ありがとう
prolog - 再帰を使用して後継者を見つけるプロローグ
私は今プロローグを学ぼうとしていて、再帰のトピックを始めました。後継者のためにこの例に出くわしました。
理論的にはどのように機能するかを理解しています。数値 X を取り、 succ はそれをインクリメントします。ここでの私の質問は、 succ は組み込みの述語ですか? または、この例では何か他のことが起こっていますか? Learnprolognow.org からの例
そんな時、このエクササイズに出会いました
バイナリを表すことを意味します。つまり、0 は f0(null)、1 は f1(null)、2(10) は f0(f1(null))、3(11) は f1(f1(null)) などです。この質問では、pterms を使用して、P2 が P1 の後継者になるように述語 (P1, P2) を定義するように求められます。誰かが私のためにこの質問をより詳細に説明できますか? 私が今見ているように、最後に到達するまで P1 をトラバースして戻ってから、それを P2 と比較する必要がありますが、構文については正確にはわかりません。どんなヒントも役に立ちます
prolog - s(X)-sum のより良い終了
(中間質問の波の中に忍び込ませてください。)
2 つの自然数の和の一般的な定義は次のnat_nat_sum/3
とおりです。
厳密に言えば、この定義は一般的すぎます。
同様に、次の回答置換が得られます。
この答えの置換はすべての自然数を含むと解釈し、他の項は気にしません。
それを踏まえて、その終了特性を考えてみましょう。実際、次の障害スライスを考慮するだけで十分です。つまり、nat_nat_sum/3
このスライスが終了しないと、終了しないだけではありません。今回も全く同じ!したがって、私たちは iff と言うことができます。
この失敗スライスは、1 番目と 3 番目の引数の間の対称性を明らかにします。どちらもまったく同じ方法で非終了に影響を与えます! したがって、それらはまったく異なるものを記述していますが (一方は被加数、もう一方は和)、それらは終了に対してまったく同じ影響を与えます。そして、貧弱な 2 番目の引数はまったく影響を与えません。
念のため言っておくと、障害スライスは共通の終了条件 ( cTI を使用) で同一であるだけでなく、
また、この条件でカバーされていない場合でも、まったく同じように終了します。
今私の質問:
nat_nat_sum/3
終了条件を持つ別の定義はありますか?(はいの場合はそれを示してください。いいえの場合はその理由を説明してください)
言い換えれば、新しい定義は、その引数の1 つnat_nat_sum2/3
がすでに有限で根拠がある場合に終了する必要があります。
細字。純粋で単調な Prolog プログラムのみを考慮してください。(=)/2
つまり、および以外に組み込みはありません。dif/2
(これには 200 の報奨金を与えます)
prolog - swi-prolog でのペアノ整数の乗算
私は現在、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 整数を使用して基本的な算術ロジックを実装しようとしています。
乗算は基本的に足し算の繰り返しなので、次のようになると思います。
プロローグの試み
問題は、prolog で係数に基づいてループを N 回実行し、peano 整数を追加して正しい結果を構築する方法が思い浮かばないことです。これはかなり簡単に達成でき、結果として得られるコードはおそらく数行のコードよりも長くはならないと確信しています。私は何時間もこれを達成しようとしてきましたが、それは私を怒らせ始めています.
ご協力ありがとうございました。メリークリスマス!
マイク
prolog - プロンプトが戻ってこない
私はいくつかの演習を試みます - 「s 表現」で数値を表すために、「0」はゼロ、s(0) は 1、s(s(0)) は 2 などです。"s number" を追加するための述語を作成しようとしました: 述語 s2int は "s number" を int に変換します。
クエリを追加すると、正しい回答が書き込まれますが、プロンプトが返されません。どうしたの?
recursion - Prolog での再帰規則と統一を理解する
私は「LearnPrologNow!」に続く Prolog の初心者です。チュートリアルのセット。概念と語彙を把握するために最善を尽くしています。この問題が提示されたとき、再帰的定義に関する第3章までのすべてを理解できました。
与えられたクエリ
これで、プログラムの考え方は、Prolog がこのシステムで次のような順序で数を数え始めるということであることがわかりました。
しかし、毎回「縮小」して上昇する原因がわかりません。プログラムが X のクエリを統合しようとしているという点で、統合の原則は理解していますが、再帰規則を 1 回だけ実行してからゼロを返す必要がありますか? クエリの周りに succ()を追加できるのは何ですか? それは逆方向に再帰規則をトラバースしていませんか?