問題タブ [occurs-check]
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 - SWI Prolog はどのような発生チェック最適化を使用していますか?
SICStus Prolog マニュアルを引用するには:
論理プログラミングの背後にある通常の数学的理論では、循環項の作成が禁止されており、変数が項と統合されるたびに発生チェックを行う必要があります。残念ながら、発生チェックは非常にコストがかかるため、Prologはプログラミング言語として実用的ではありません。
ただし、これらのベンチマーク(The Prolog のもの) を実行したところ、SWI Prolog で発生チェック (OC) のオンとオフの間にかなり小さな違い (20% 未満) が見られました。
OC がオフ::- set_prolog_flag(occurs_check, false).
で.swiplrc
(再起動)
OC がオン::- set_prolog_flag(occurs_check, true).
で.swiplrc
(再起動)
これらのベンチマークは実際の使用状況を表していませんか? (「かなり代表的」であるために特別に選ばれたことをどこかで読んだことを覚えています) SWI Prolog は、SICStus の人々が気付いていない、OC のコストを小さくするいくつかの最適化トリックを実装していますか? もしそうなら、それらは公開されていますか?(90年代からこれに関する論文をたくさん見つけましたが、最新のものかどうかはわかりません)