問題タブ [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 - プロローグのリストの合計
私は「プロローグの芸術」の本を読んでいて、「補助述語を使用せずに、SumがListOfIntegersの合計である場合に成立する関係sum(ListOfIntegers、Sum)を定義する」という演習を見つけました。このソリューション:
これは、私が望んでいたとおりには機能しません。
私はXが
問題は、最初の「反復」で「Sumを0に初期化する」必要があることだと思いましたが、それは非常に手続き的であり、残念ながら、私はそれを機能させるためのプロローグにはあまり適していません。何かアイデアや提案はありますか?
prolog - Prolog述語-無限ループ
自然数を使用して、2の累乗のProlog述語を作成する必要があります。自然数は次のとおりです:0、s(0)、s(s(0))ansなど。
例えば:
これは私のコードです:
そして、それは最初の例で完全に機能しますが、2番目の例では無限ループに入ります。
これを修正するにはどうすればよいですか?
exception - 「引数が十分にインスタンス化されていません」というエラーメッセージが表示され続ける理由を理解できない
Arguments are not sufficiently instantiated
以下に示すように、私が書いた加算ルールによる乗算のエラーが発生し続けます。
私は Prolog を初めて使用し、そのような単純な問題でさえ本当に苦労しています。
書籍やオンライン チュートリアルに関する推奨事項があれば、ぜひ参考にしてください。
Ubuntu Linux の SWI-Prolog で実行しています。
prolog - Prologの後継表記は、不完全な結果と無限ループを生成します
私はPrologを学び始め、最初に後継表記について学びました。
そして、これは私がプロローグでペアノの公理を書くことについて知るところです。
PDFの12ページを参照してください。
掛け算のルールをPrologに入れました。次に、クエリを実行します。
つまり、基本的に6の因数を見つけることを意味します。
結果は次のとおりです。
この結果には2つの問題があります。
- すべての結果が表示されているわけではありません。結果X=6、Y=1が欠落していることに注意してください。
- Ctrl + Cを押してから中止を選択しない限り、停止しません。
だから...私の質問は:
- 何故ですか?「prod」と「sum」を入れ替えてみました。結果のコードは私にすべての結果を与えます。そして繰り返しますが、それはなぜですか?それでもデッドループです。
- それを解決する方法は?
私は無限ループに関する他の答えを読みました。しかし、私は誰かがこのシナリオに基づいて答えてくれることを感謝します。それは私を大いに助けます。
prolog - prolog は succ を使用して再帰クエリをどのように実行しますか?
このプロローグクエリがそのように機能する理由を誰かが説明してくれますか? 定義は次のとおりです。
これを考えると:
クエリのトレースは次のとおりです。
そのチュートリアルで私を最も混乱させたのは、最初の引数で succ が取り除かれ、再帰するという事実でした。ただし、再帰中、R は成功を収めます...どうやって?! また、最初の出口 (9) のゼロはどこから来ますか? 私はプロローグが初めてで、宿題のために言語を理解しようとしています。どんな助けでも大歓迎です。
注: 興味のある方のために、このチュートリアルへのリンクはhttp://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse9です。
prolog - Prolog greater_than /2 成功
私はPrologが初めてで、この演習を解決しようとしています:
greater_than/2
この講義で紹介した記法で 2 つの数字 (つまり0
,succ(0)
,succ(succ(0))
...) を引数として取り、1 つ目が 2 つ目より大きいかどうかを判定する述語を定義します。例えば:
これまでの私の答えは次のとおりです。
もちろんうまく動かないので、誰かに助けを求めています。ありがとう。
haskell - 要素の型がパラメーター化されたリストの型エンコードされたインデックスの変換
タイプセーフな二項ヒープを実装しようとしています。このために、型エンコードされたインデックスによって要素型がパラメーター化される 2 つのデータ型があります。
Vec
数値パラメーターが減少する値をエンコードします。最後の要素は常に によってパラメーター化されZero
ます。RVec
他の制限なしで増加する数値パラメーターで値をエンコードします (これが、任意の数値RNil
を生成できる理由RVec
です)。
これにより、(たとえば)型システムによってチェックされた、高さが増加/減少するツリーのリストを持つことができます。プロジェクトの大部分を実装した後、実装できなかった一見単純な関数が必要であることに気付きました。
指定されたリストの順序を単純に逆にする必要があります。何か案は?前もって感謝します。
prolog - バックトラックが多すぎる:なぜここに「やり直し」があるのですか?
私はPrologで非常に簡単な演習を行っていますが、トレースには理解できないことがあります。プログラムは、>
後続として表される整数の「大なり記号」()です。
私の問題:リクエストが次のトレースでをgreater_than(succ(succ(succ(0))),succ(0))
生成する理由がわかりません:redo
なぜredo
ここにあるのですか?どうすればそれを回避できますか(もちろん、カットなしで)?
ところで、あなたが尋ねる前に:いいえ、それはある種の宿題ではありません...
prolog - 私はプロローグに慣れていないので、この演習で誰かが私を助けることができますか?
less/2
t1がn1を表し、t2がn2を表す
場合、 less(t1, t2)
n1 <n2の場合に成功するように、述語を記述します。たとえば、less(s(z), s(s(s(z))))
成功するless(s(z), s(z))
必要があり、失敗する必要があります。t1がインスタンス化されていない論理変数であり、t2が自然数n2の適切な表現である場合、述語はn2未満のすべての数を列挙する必要があります。たとえば、クエリ
およびで成功する必要がX = z
ありX = s(z)
ます(必ずしもこの順序である必要はありません)。
prolog - このクエリの SLD ツリーは何ですか?
次の Prolog プログラムを考えてみましょう (「The Art of Prolog」より):
そしてクエリ:
SICStus と SWI の両方が期待されるZ = s(s(s(s(0))))
回答を生成しますが、ユーザーに次の回答 (正解no
/false
回答) を問い合わせます。ただし、唯一のゴールが見つかった後、なぜ SLD ツリーに開いたブランチがあるのか 理解できません。SICStus と SWI の両方でデバッグを試みましたが、まだ結果を解釈することができません。私が理解できる限り、どちらもplus(s(s(s(0))), 0, _Z2)
. 誰かがこの動作を理解するのを手伝ってくれますか?