問題タブ [prolog-cut]
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.
design-patterns - カットせずにPROLOGでラップされた変数をパターンマッチする方法は?
Prolog プログラマーに非常に簡単な質問があります。これは非常に簡単なはずですが、私はその言語の経験がないので、助けてください。Prolog で単純なプログラミング言語を解釈しようとしています。この言語では、単純変数と配列変数の 2 種類の変数を使用できます。特定の変数の値を計算する関数があります。
variable は、 のような単純な変数x
または のような配列変数のいずれかarray(ident, index)
です。その関数を Prolog でどのように記述すればよいかわかりません。そのため、通常の変数と配列変数では異なることを行います。私はこのようなものを思いついた:
これは機能しますが、もっと良い方法があるはずです。
prolog - カットのプロローグ使用
Prolog で次の関数を書き直しています。
V1:
V2 として:
次に、カットを試してみたいと思いました。グリーン カット (V3) の場合:
レッド カット (V4) の場合:
ただし、カットを削除するとコードの同じ動作が可能になるため、それらの利点がわかりません...何か助けはありますか?
prolog - カット(!) vs リターン
Prolog で述語を作成していますが、述語が終了する前に終了する可能性があります。return;
そのため、 (C++)に似たコマンドを探していました。私は a を使用しましたcut !
が、それが文字通り何を表しているのか、そしてそれが正確に何をするのかについては疑問ですreturn;
. 元:
上記の機能はまったく同じですか?
prolog - 「!」を使用する理由 プロローグで
これは私が理解しようとしているコードです。
「!」の使用は何ですか 上記のコードの述語 p(,,) 。または、上記のコードのすべてのステップにコメントを追加して、理解できるようにすることはできますか。ありがとう。
prolog - Prolog プログラム: ファンクターを定義する別の方法
私の最後の試験ではdouble/2
、次の指示に従って、 と呼ばれる Prolog 述語を作成するdouble(X, Y)
必要がありY
ましX
たX
。たとえば、クエリの
double([1, 3, 2, 4], X).
結果は
X = [1, 3, 4, 8].
functoreven/1
を定義せずに簡単に使用できるようにしました (実際、定義するのは非常に簡単です)。これは、引数が偶数の場合は true であり、そうでない場合は false です。私は実際に functor も使用してプログラムを作成することになりましたodd/1
。しかし、教授は私にこう言いました。では、どうしてこのように書けるようになったのだろうか。
私が書いたものは次のとおりです。
even(N)
注意:コードの最後の行から削除しても (つまり、 only を使用する場合odd(N)
、これは only を使用するのと実質的に同じです。これは、even(N)
そのうちの 1 つしか使用しないためです)、プログラムは引き続き機能します。しかし、これは望ましい解決策ではありません。なぜなら、この方法では「カット」が赤いカットになるからです (私のプログラムでは緑のカットです)。
prolog - 節の先頭の切り取りと「cut」「!」「fail」の関係
!
句の最初にカット ( ) を入れるとはどういう意味ですか?
!
と fail
と どのように関連しています はどう 違いますか?
ありがとう。for 、述語は「失敗」するだけ
だと思います笑バックトラックしないのとは違いますか?fail
確認したいだけです:)
prolog - 以下のコードで選択ポイントを削除すると、どのように効率が向上しますか (Prolog)?
以下のコードでは、!
効率のために選択ポイントを削減する (カット) があります。reverse
述語とagent_do_moves
述語が不可欠 であることは確かです。
prolog - プロローグ - カットの使い方を理解する
カットの使い方がよくわかりません。たとえば、この場合: flatten、本当に必要ですか? 両方のカット述語がなくても機能します(削除してみました)。カットにバックトラックが発生する可能性があるのはどのような場合ですか? カットを削除すると、本「The art of prolog」(Shapiro E.、Sterling L.) と同じ実装が得られます。
これは別の質問につながります.2番目の節でリストではないかどうかを確認する必要がありますか? 単項だと前節と統一しない…ですね。