30

ロジック プログラミングとは、宣言型プログラミング言語のサブパラダイムを意味します。この質問を「if-then-else で解決できる問題は何ですか?」と混同しないでください。

Prolog のような言語は非常に魅力的であり、学習のために学習する価値はありますが、現実世界の問題のどのクラスがそのような言語で最もよく表現され、解決されるのか疑問に思う必要があります。もっと良い言語はありますか?論理プログラミングは、より流行のプログラミング言語で別の名前で存在しますか? 答えの冷笑的なバージョンはPython Paradoxの変形ですか?

4

8 に答える 8

21

プロトタイピング

Prolog は動的であり、50 年間使用されています。コンパイラはリベラルで、構文を最小限に抑えており、「何かをする」ことは簡単で、楽しく、効率的です。SWI-Prolog には組み込みのトレーサー (デバッガー!)があり、グラフィカル トレーサーさえあります。を使用してその場でコードを変更したり、make/0モジュールを動的にロードしたり、インタプリタを離れずに数行のコードを追加したり、現在実行中のファイルを でその場で編集したりできますedit(1)foobar/2述語に問題があると思いますか?

?- edit(foobar).

エディターを離れるとすぐに、そのものが再コンパイルされます。確かに、Eclipse は Java に対して同じことを行いますが、Java は正確にはプロトタイピング言語ではありません。

純粋なプロトタイピングとは別に、Prolog はロジックの一部をコードに変換するのに非常に適しています。したがって、自動証明器とそのタイプのものは、Prolog で簡単に記述できます。

最初の Erlang インタープリターは Prolog で作成されました。これには理由があります。Prolog は、解析ツリーで見つけたロジックの解析とエンコードに非常に適しているからです。実際、Prolog にはパーサーが組み込まれています。いいえ、ライブラリではありません。構文、つまりDCGにあります。

Prolog はNLP で、特に構文と計算セマンティクスでよく使用されます

しかし、Prolog は十分に活用されておらず、十分に評価されていません。残念ながら、学術的または「実際の目的には使用できない」という汚名を着ているようです。しかし、事実と事実間の関係の計算を含む多くの現実世界のアプリケーションで非常に有効に使用できます。数値計算にはあまり適していませんが、CS は数値計算だけではありません。

于 2008-10-19T11:31:50.060 に答える
14

プロローグ =構文の統一+後方連鎖+ REPLであるため、

構文の統一が使用されるほとんどの場所も、Prolog の適切な使用法です。

構文統一の使用

  • AST 変換
  • 型推論
  • 用語書き換え
  • 定理の証明
  • 自然言語処理
  • パターンマッチング
  • 組み合わせテスト ケースの生成
  • XML文書などの構造化データから部分構造を抽出
  • シンボリック計算、すなわち微積分
  • 演繹データベース
  • エキスパートシステム
  • 人工知能
  • 解析中
  • クエリ言語
于 2012-04-04T13:56:22.583 に答える
10

制約論理プログラミング (CLP)

ロジック プログラミングの非常に優れた適切な使用例は、既に数多く紹介されています。ロジック プログラミングの非常に重要なアプリケーション領域からのいくつかのタスクで、既存のリストを補完したいと思います。

論理プログラミングは、他のパラダイムよりもシームレスに制約と融合し、制約論理プログラミングと呼ばれるフレームワークをもたらします。

これにより、次のようなさまざまなドメイン専用の制約ソルバーが作成されます。

  • 整数CLP(FD)
  • ブール値CLP(B)
  • 有理数CLP(Q )
  • 浮動小数点数のCLP(R)

これらの専用の制約ソルバーは、まだ言及されていないロジック プログラミングのいくつかの重要なユース ケースにつながります。その一部を以下に示します。

Prolog システムを選択する場合、特に商用ユーザーの場合、その制約ソルバーのパワーとパフォーマンスが決定要因の 1 つになることがよくあります。

CLP(FD) — 整数の推論

実際には、CLP(FD) はロジック プログラミングの最も重要なアプリケーションの 1 つであり、特に次の分野のタスクを解決するために使用されます。

  • スケジューリング
  • 資源配分
  • 計画中
  • 組み合わせ最適化

詳細といくつかの例については、

CLP(B) — ブール制約

CLP(B) は、以下に関連してよく使用されます。

  • SAT解法
  • 回路検証
  • 組み合わせカウント

を参照してください。

CLP(Q) — 有理数

CLP(Q) は、オペレーションズ リサーチで発生する重要なクラスの問題を解決するために使用されます。

  • 線形計画
  • 整数線形計画法
  • 混合整数線形計画法

を参照してください。

于 2016-10-17T07:55:12.483 に答える
5

Prologが無料で提供するものの1つは、バックトラッキング検索アルゴリズムです。自分で実装することもできますが、そのアルゴリズムを利用できるようにすることで問題を最もよく解決できる場合は、それを使用すると便利です。

私がそれが得意だと思った2つのことは、数学的な証明と自然言語理解です。

于 2008-10-19T01:57:34.213 に答える
5

Prolog は、数値以外の問題に最適です。この記事では、Prolog のいくつかのアプリケーションの例をいくつか示しており、Prolog が解決できる問題の種類を理解するのに役立つ場合があります。

于 2008-10-21T12:42:37.673 に答える
5

Prolog はパズルなどを解くのが得意です。とはいえ、パズルを解く分野では、簡単/中程度のパズルを簡単に解き、複雑なパズルを解くのが難しくなります。それでも、Hexiom、Sudoku、Nurikabe などのグリッド パズルなどのソルバーを作成することは特に難しいことではありません。

于 2008-10-21T12:49:55.163 に答える
2

簡単な答えの1つは、「システムの構築」です。Makefileの構築に使用される言語(少なくとも、依存関係を記述する部分)は、実際には「純粋な」論理プログラミング言語ではありませんが、本質的に論理プログラミング言語です。

于 2008-11-12T18:44:01.310 に答える