24

SWI-Prolog のセマンティック ライブラリを使用した、実際のプログラミング経験のある方からのご意見をお待ちしております。

編集: この質問の理由は、私がプロローグの経験を持つ多くの人々と話をした中で、彼らのほとんどが学術プロジェクトで何らかの AI プログラミングにプロローグを使用しているように見えるからです。誰かが本番環境で広く使用しているかどうかを知りたかった. リアルタイムの保守性のため、パフォーマンスは、良い成績を得るためにプロジェクトを実行するのとは異なります。

Java のようなプログラミング言語とどのように統合しましたか?

編集:回答で述べたように、REST サービスまたは SWI-Prolog の外部インターフェイスの使用が 2 つの最適なオプションのようです。

(セマンティック Web のコンテキストで) Prolog ライブラリを何に使用しましたか?

おそらく、ここでこれに対する明確な答えを得ることはできません。おそらく、この質問はセマンティックオーバーフローに属しています。私は今、公正な考えを持っており、より適切なフォーラムでこの議論を続けます.

どの開発環境を使用しましたか? SWI-Prolog が提供する Emacs またはそのバリアントが圧倒的な答えのようです。

Intellij IDEA for Java のような IDE はまったく必要ありませんでした。結局どうしよう、オートコンプリート?ルールベースの言語の必要性を理解しています。繰り返しになりますが、開発環境について説明した理由は、ルール (デバッグ) を追跡し、知識セットの異常を特定するのに役立つからです。SWI-Prolog のグラフィカル トレーサーは最初の要件を処理しますが、少なくとも私には、見掛け倒しで制限があるように見えました。しかし、私は他に何かがあるとは信じていません。

SWI-Prolog を使用するというアイデアは本当に気に入っていますが、生産性に影響する場合は使用を控えます。

回答で述べたように、Prolog は得意なことを実行するために使用する必要があります。私は常にこれを知っていたので、他のプログラミング言語との統合に関する私の質問です。最大の生産性の豚は開発者の質であり、開発段階にあるようです。システムの問題は休止状態で簡単に修正できない場合がありますが、一連の質問を使用してシステムの有効性を確認することで対処できます。

注: 回答について言及するときは、@littletable によって提供された回答を意味します。また、セマンティック Web 用の SWI-Prolog に興味がある人にとっては、theaが興味深いようです。

4

2 に答える 2

14

免責事項: 私は商用/実稼働環境で SWI-Prolog を使用したことはなく、SWI/Java インターフェイスも試していません (ただし、SWI-Prolog メーリング リストでは適切に機能すると報告されていました)。セマンティックウェブ。

そうは言っても、私は SWI-Prolog を使用して大規模で重要なプロジェクトを作成しましたが、それはおもちゃのアプリケーションではありませんでした。研究を完了するためには、SWI-Prolog が機能する必要がありました。したがって、必要な質問のすべてではありませんが、この質問に答える資格がいくつかあります。

大規模なプロジェクトのコンテキストでは、Prolog を検索ルーチンを作成するためのドメイン固有の言語として扱うのが最善です。SQL やストレージとは異なります。Prolog は 1 つのことを非常にうまく行っており、検索の問題を解決しています。あなたの問題が、一連の事実と規則が与えられた変数のセットへの有効な代入を見つけることに絞り込める場合、Prolog はあなたの選択の武器です: 調整以外のコーディングについて心配する必要はありません。クエリとルール。また、特に述語をコンパイルする場合は、かなり高速に実行されます。Prolog が遅いのは、本質的に遅いからではなく、大きな検索空間で検索ルーチンを実行するためです。

そのことを念頭に置いて、SQL を統合するのと同様の方法で Java と統合することができます。Prolog は検索を解決します。永続的なデータとルールを保存し、クエリを実行します。それ以外は Java アプリが処理します。

開発環境は、Prolog にとって少し苦手なところです。派手な IDE を手に入れることはできません - 単純に、派手なものがほとんどないからです。Prolog プログラムが完全なコンパイル時の情報を持つことはめったにないため、完全なオートコンプリートは得られません。Prologシェルを常に開いた状態で、Emacsを使用しました。ほとんどの場合、Prolog のテキスト トレーサ/デバッガがうまく機能します。SWI には独自のグラフィカル デバッガが付属していますが、試したことはありません。

Prolog には、あまり知られていない利点がいくつかあります。組み込みの構文解析フレームワーク (DCG ルール)、優れたマクロ システム (項展開)、およびメタ述語 (call、findall など)。それらの使い方を知っていれば、これらはあなたのデッキの本当のエースです。

要約すると、Prolog は生産性を向上させますか、それとも低下させますか? それは、現在何が生産性を妨げているかによって異なります。Java で知識表現と検索ルーチンを実装する方法を考えるのに時間がかかりすぎる場合は、Prolog を使用してください。SQL を使用する代わりに独自の赤黒木を実装するわけではありません。ソフト リアルタイム パフォーマンスと台無しになる IDE を探している場合は、別の方法を試してください。

于 2011-02-08T11:55:48.147 に答える
6

実稼働環境でも実際には使用しませんでしたが、Java / EclipseベースのBioclipseワークベンチに統合して、実際のシナリオで使用し、論文の一部として使用しました。また、論文の作業は、Bioclipseでのプロローグ統合のパフォーマンスと使いやすさのテストに重点を置いていました。

以下であなたが尋ねた質問に簡単に答えますが、興味のある人は、「BioclipseでのセマンティッククエリのためのセマンティックWebツールとしてのSWI-Prolog:統合とパフォーマンスのベンチマーク」という名前の論文レポートでほとんどの情報を見つけることができます。同様に私の関連するタグ付けされたブログ投稿で。ソースコードはgithubリポジトリで入手できます。

Javaのようなプログラミング言語とどのように統合しましたか?

JPLJavaPrologインターフェースを使用しました

(セマンティックWebのコンテキストで)プロローグライブラリを何に使用しましたか?

私はそれを使用して、異なる高さのピークを含む、約60000のNMRスペクトルのRDFデータベースに対してパターンマッチングを行いました。これを使用して、PelletやJena(Javaベース)などの他のセマンティックWebツールと比較して、この操作のSWI-Prologのパフォーマンスをテストしました。(BTW、SWI-Prologはこれらのツールの両方をはるかに上回っています)。

どのような開発環境が使用されましたか?

Eclipse RCP

私はswiプロローグを使用するというアイデアが本当に好きですが、それが生産性に影響を与える場合は、それを避けます。

私の経験では、特定の問題に対する生産性の向上に加えて、特定の操作のパフォーマンスも、従来のプログラミング言語で記述されたツールよりもはるかに優れています。

于 2011-02-16T10:05:01.327 に答える