問題タブ [iso-prolog]
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 - 項が異なる変数のリストであることをテストする
ISO Prologで個別の変数のリストをテストするための最もコンパクトで標準的な方法は何ですか? このメタ論理述語を と呼びましょうis_varset/1
。
したがって、引数がすべて異なる変数のリストである場合、成功するはずです。[]
リストの末尾には常に a が含まれることに注意してください。変数が最後にある場合、これを部分リストと呼びます(したがって、リストではありません)。また、非変数項が[]
変数でも変数でもない接尾辞として現れる場合、これは部分的なリストでもリストでもありません。
部分リストでもリストでもない用語の注目すべき特殊なケースは、無限リストです。それらには少なくとも 2 つの同一の接尾辞が含まれており、実際にはそのような接尾辞が無数にあります。無限リストは標準の範囲外です — それらを作成しようとするすべての試みは、結果が未定義の STO 統合をもたらします。それでも、一部のシステムはそれらをサポートしているため、理想的にはそれらの無限リストはis_varset/1
有限に失敗するはずです。
これは、Cor.2:2012 を含む ISO/IEC 13211-1:1995の組み込みの概要です。
prolog - 変数の 2 つのリストの交点
ISO Prolog で、線形時間で実行される変数の 2 つのリストの共通部分の (メタ論理) 述語を定義する方法は? 変数は、決まった順序で表示されます。変数の「年齢」のような実装依存のプロパティは、結果に影響を与えてはなりません。
に類推してlibrary(ordsets)
、関係を呼び出しましょうvarset_intersection(As, Bs, As_cap_Bs).
つまり、3 番目の引数は出力引数であり、最初の 2 つの引数の共通部分と一致します。
現在の ISO 標準 (Cor.2 を含む ISO/IEC 13211-1:1995 )のビルトインのリストを参照してください。
(注意してください、私は数年前に別の質問の過程でこの質問に答えました。しかし、それは非表示のままであり、Google には表示されません。)
prolog - ISO Prolog 述語の複雑さ
標準の Prolog 述語の時間計算量の上限に対する保証はありますか?
例:標準準拠の Prolog システムsort(+List, ?SortedList)
で O(nlog(n)) 時間 (n は の長さ) で実行されることは確かですか?List
prolog - 2 つの変数リストの等価性
別の言い方をすれば、一意の変数の 1 つのリストが他の変数の順列である場合、述語は成功するはずです。に類推してlibrary(ordsets)
、このメタ論理述語を呼びましょう varset_seteq(As, Bs).
とは対照的にord_seteq/2
、この述語は単純にはできないことに注意してくださいAs == Bs
。
prolog - Prolog の論理更新ビューはアサートとリトラクトに対してどのように機能しますか?
アサートとリトラクトに関する Prolog の論理ビューを詳しく説明してもらえますか?
たとえば、以下のコードでは、Prolog は最初の実行で true を返し、その後の実行で false を返します。asserta(nextBound(100))
Prolog の論理ビューが満たされると、nice(X) は開始時の値でまだ凍結されているため、この変更は無視され、 nextbound(100)
false でなければならない理由がわかりません 。
prolog - Jekejeke Prolog で Fact を作成できません
私は Seven Languages In Seven Weeks Prolog チュートリアルを使用しており、Android Jekejeke Runtime を使用していくつかの例を実行しようとしています。たとえば、追加すると
チュートリアルから、私は得る。
How to create a fact in SWI-Prolog? で説明されているように、assert を使用してみました。assert
、しかし、好きではなく、それは未定義であると言います。
おそらく、ランタイムがどのように機能するか、またはその prolog.it の方言に関する基本的なことが欠けています。
prolog - ユーザー定義の算術関数の実装
関数 (例: hammingweight) を追加して、右辺で発生する式で使用するにはどうすればよい(is)/2
ですか?
ここで、goal_expansion や term_expansion のようなものが役に立ちますか?
これが大きな機能ではないことは認めますが、私の Prolog プログラムの一部を読みやすくすることができます。
カスタム(is)/2
述語を作成する (カスタム式エバリュエーターを実装する) ことは可能ですが、この場合、ランタイム オーバーヘッドのために読みやすさを犠牲にしたくないため、ランタイム オーバーヘッドを低く抑えたいと考えています。
prolog - 負の整数の表現
ISO-Prolog には、負の整数の表現とその操作に関する処方箋/推奨事項はありますか? 2の補数かな?
プログラマー/ユーザーとしての質問: 負の整数に対してビットレベルの操作を実行するときに安全に行える仮定はありますか?