問題タブ [sicstus-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.
module - SICStus の make/0 機能
すべてのモジュール (および理想的には、ロードまたはインクルードされた他のすべてのファイル) が最新であることを確認するにはどうすればよいですか? を発行するuse_module(mymodule)
と、SICStus はファイルの変更日を比較し、mymodule.pl
新しい場合は再ロードします。またinclude
、-ed ファイルは再コンパイルをトリガーします。ただし、 で使用されるすべてのモジュールを再チェックするわけではありませんmymodule
。
簡単に言うと、SWI が で提供するのと同様の機能を得るにはどうすればよいmake/0
ですか?
file - テキストファイルからプロローグファイルへのファクトのリストへのデータの断片化
functor(arg1, arg2, ..., argN)
データファイルを、ファンクターの名前が大文字の行で、引数がそれに続く小文字の行であるような事実のリストに分割したい、その後、新しい句は実行時に作成されたプロローグファイルに保存されます
file.txt
結果 :
file.pl
「。」最後に追加されます
新しいプロローグ ファイルをビルドしてコンパイルした後file.pl
:
list - maplist/3 結果からのランダム結果のフィルタリング
List=['F1',a1,a2,' LF2',a1,a2]
以下の述語 is_upper/2 と maplist/3 でこのリストを除外したい
is_upper(Elem,Res)
:Elem
大文字のアトムの場合、Res に割り当てられます。すべての大文字のアトムをリストに入れたいと思いますList_Upper
私はこれを試します;
outs-random をフィルタリングする方法_A,_B...
期待される結果:
よろしく
concurrency - Prolog 遅延評価: LIFO または FIFO ウェイクアップ?
多くの Prolog システムにはfreeze/2
述語があります。この述語は、geler/2
Prolog-II よりも前に発明されたので、おそらくその名前を持つべきです。
同じ変数に条件があると仮定しますが、2 つの異なる目標があります。
G1 が最初に実行されるか、G2 が最初に実行されますか? G1 と G2 が新しいフリーズを生成し、それも起こされたらどうなるでしょうか。
G3 または G4 は常に G1 と G2 の間で実行されますか? それとも、G3 または G4 は G1 と G2 の後、または後で実行される可能性がありますか?
さよなら
prolog - SWI の atom_list_concat/3 のように SICStus を使用してアトムを分割します
のようなアトムが'id1,id2,id3'
あり、 SWI の述語 atom_list_concat/3 と同じ方法でリストに分割したい。
期待される結果
とにかく、DCGを使用してそれを行うことは可能ですか
prolog - SICStus Prolog: FFI が遅い、ハミングの重みを速く計算するには?
SICStus Prolog 4.3.2 マニュアルに示されているように、外部コード サンプルc1/2
Y is X+9
を実行し、そのランタイムを対応する Prolog コードと比較すると、奇妙なタイミング結果が得られました。
JIT を有効にすると、次のことがわかりました。
JIT( )をオフにした後SP_JIT=disabled
、タイミングは次のように変更されました。
適切なエラー処理と大きな整数のサポートがなくても、C コードは JITted Prolog コードのほぼ 4 倍の時間実行されます。JIT をオフにすると、タイミングの数値が多少変わりますが、全体像は変わりません。
SICStus でハミング重みの計算を高速化するにはどうすればよいですか? SWI には専用の算術関数がありますが、SICStus は (まだ) サポートしていないようです... popcount/1
prolog - goal_expansion/6 をコンパイル時のみに制限する
SICStus Prolog には、ゴールを展開するためのフックがあります。goal_expansion/6
これは、コンパイル時と実行時の両方でメタ呼び出し中に呼び出されます。これらの呼び出しは、かなりの実行時オーバーヘッドを引き起こし、メタ呼び出しを遅くします。私の拡張の目的は最適化のみです。したがって、意味的には、ゴールと拡張ゴールは同等です。
実行時にそのような呼び出しを無効にするにはどうすればよいですか?
(私には少し粗雑に見えるものを廃止する必要があるようです。軽量の再コンパイルgoal_expansion/6
も妨げられます)。
prolog - 予期しないエラー「! セグメンテーション違反」
最近、プロジェクトをコンパイルしようとすると、予期しないエラーが表示されることがあります。
エラー :
何が起こるかについての説明はありますか!
prolog - 組み込みの Prolog 述語 (is)/2 のパフォーマンス
更新: 11.6.2016
SICStus Prolog 4.3.2 で観察した不可解なパフォーマンスの不一致は、最近リリースされた SICStus Prolog 4.3.3では完全に解消されました。称賛!
以下の「ランタイム」表を更新して、SICStus Prolog 4.3.3 を含めました。ハイライトは次のとおりです。
(is)/2
以前よりも最大 10 倍高速です。val_of/2
も途方もなく高速になり、ほぼ 2 倍になりました。
MEGO;-)
「プロローグ言語のサイズ手順」という質問に答えると、 SOユーザー@TanosTintinidisは、初心者に導出を紹介する非常に簡単な方法1を提案しました。length/2
[...]また
E
、式を評価しようとしているという理由だけでインスタンス化する必要があることに注意してください。次のように書くことができます。そして、あなたがそれを呼び出す場合:
楽しいですね。
E
最後の、つまり callを評価したい場合があります?- size([1,2], E), N is E
。[...]
楽しい? とても楽しいです! 多くの興味深い実験が待ち構えています。
左寄りの木と右寄りの木
/li>組み込み
/li>(is)/2
対val_of/2
go(2000000)
さまざまな Prolog プロセッサを使用して実行したランタイムを測定するには2 :
Intel Core i7-4700MQでは、SICStus と SWI で次のランタイムを観察しました。
私はこれらの(再現可能な)結果に困惑しています...何が起こっているのか誰か教えてもらえますか?
脚注 1 : 簡潔さと読みやすさのために、変数名はわずかに変更されています。
脚注 2 : 適切なコマンドライン引数を指定して SWI-Prolog 7.3.20 を実行しますswipl -G2G -L2G -O
。
prolog - プロローグ: assert を含むルールは、最初の結果のみをファクトに追加します
私はいくつかのものを事前計算し、結果をプログラムの最初に事実として保存しようとしています:(簡略化されたコード)
しかし、SICStus Prolog でファイルを参照すると、最初の結果 cost(1,20) のみがアサートされます。
しかし、SICStus プロローグ コンソールで assert_all の右側を直接入力すると、両方のコスト/2 ファクトが存在します。
この動作は非常に紛らわしいと思います。何が起こっているのでしょうか?