問題タブ [failure-slice]
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.
recursion - ローカル スタック スペースからの Prolog アウト/無限再帰
このサイトで他の同様の質問と回答を読みましたが、特定の問題に対する回答が見つからないようです。Prolog で迷路をエンコードしようとしています。領域 0 から領域 1 または領域 3 に自由に移動できます。領域 3 から、領域 0、領域 4、領域 5 などに自由に移動できます。長さ 7 のすべてのパスを最初から最後(0から14まで)。SWI-Prolog で次の方法で問題をエンコードしました。
実行するpath(14,0).
と が得られtrue
ます。ただし、path(0,14) を実行すると、ローカル スタック領域が不足します。それがどのようになるかわかりません。助けてくれてありがとう!
prolog - これが無限再帰を引き起こしているのはなぜですか?
私はプロローグにこのプログラムを持っています。ここでは、基本的に人々のグラフを定義し、どの人々が関連しており、どの派閥であるかを示すいくつかの述語を作成する必要があります。事実は次のとおりです。
そして、これがクリークという名前の述語の定義です。パラメータとしてグラフ G と人物のリストを取り、リスト内の人物が実際に友人のグループであるかどうかをチェックしようとします (つまり、述語 goodfriends は、リスト内の人物の各ペアに対して真です)。
clique が行うことは、リストが 2 人だけで構成されている場合、この 2 人が仲良しかどうかをチェックすることです。これが本当なら、2人の間に派閥があります。人のリストに 2 人以上の人がいる場合、リストの先頭ごとに、つまり、リストの末尾にいる残りの人と良い友達かどうかをチェックし、それをすべてのリストに対して再帰的に行います。人。以下は、クリークが機能するための残りのヘルパー述語の定義です。
質問
述語「クリーク」をテストするために、runner という名前の述語を作成すると、次のようになります。
グラフ内のすべてのクリークを返したいのですが、結果は次のとおりです。
再帰の何が間違っていますか? 正しい結果が得られることはわかっていますが、何らかの理由で、すべての結果が再帰的に表示されます。
前もって感謝します。
parsing - プロローグの解析でスタックが不足しています
私はこのコードを持っています
私が何かをキャストしnp(X).
vp(X).
たりpp(X)
、可能な解析を1つ取得したりして、スタックエラーが発生した場合。私がキャストするとき、私s(X).
は解析さえしません。無限ループが実行されているためだとはわかっていますが、どの時点でループされるかはわかりません。すべての変数に同じ名前を使用しているために発生する可能性があると考えましたが、それらを個別の名前に変更しても何も変わりませんでした。
誰でもヒントを得ましたか?
前もって感謝します!
sorting - プロローグ - テールが null にならないようにするにはどうすればよいですか
次の問題があります。
リストに、長さの昇順でソートされた他のリストが含まれている
sorted(LL)
場合に満たされるpredicate を定義します。LL
例えば:
そして、私はこれまでのところこのコードを持っています:
問題は上記の行に含まれています: sorted([L2,T])
. リストのリストに 1 つの要素しか残っていない場合、その呼び出しは空のリストを追加する[]
ため、short/2 は失敗します。これは、次の SWIPL トレースに示されています。
prolog - Prolog 無限ループの問題
私は以下の機能を持っています。で呼び出すとfinal_filter([(2, 2)], R)
、「2 2」のペアがたくさん出力されます。コメントget_all_sums(S, _)
すると問題なく動作しますが、個別にテストするとget_all_sums(4, R)
. 私も問題なく動作しますが、何が問題なのですか?
prolog - Prolog を使用して 1 つのリストを 3 つに分割する
可変長のリストを順番に 3 つの偶数のリストに分割する関数を作成しようとしています。以下はそれを 3 つに分割しますが、プロセスはそれらを一度に 1 つずつ各リストに挿入します。
私が欲しいものの例は次のとおりです。
別の例は次のとおりです。
次のコードは、一度に 1 つずつ各リストに挿入して分割します。
このコードは次を出力します。
この問題を解決するにはどうすればよいですか?
math - Prolog の範囲の積
範囲内の製品の製品を計算するプログラムを作成する必要があります。
次のコードを書きました。
Nt
これにより、 ~N
の基本的な製品が実装され1/ln(j)
ます。私が理解している限り、Nt と N が等しいときに停止する必要があります。ただし、次の理由で機能させることができません。
次のエラー。SWI-Prolog のデフォルト ライブラリを使用せずにループを実装する他の方法はありますか?
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 - Prolog を使用して数字からカウントダウンするには
些細な質問ですが、プログラムが特定の数値以下の数値のリストを返すようにしたいと考えています。たとえば、CountD(4,L)
. 与えるべき[4,3,2,1]
です。これは私がこれまでに持っているものです:
prolog - Prolog: X が 0 から K - 1 の範囲内にあるかどうかを確認します
私はプロローグを始めたばかりで、私が書くコードのすべてのビットが無限ループに変わります。
X が 0 から K - 1 の範囲内にあるかどうかを具体的に確認しようとしています。
コードの背後にある私の考えは、K0 が X に等しくなるまで K をデクリメントするというものです。その後、基本ケースが開始されます。