論理プログラミングの最適な用途は何ですか?
-
03-07-2019 - |
質問
論理プログラミングによると、宣言型プログラミング言語のサブパラダイムを意味します。この質問を" if-then-elseで解決できる問題は何ですか?"と混同しないでください。
Prologのような言語は非常に魅力的であり、学習のために学習する価値はありますが、このような言語によってどのクラスの現実世界の問題が最もよく表現され解決されるのか疑問に思う必要があります。より良い言語はありますか?よりトレンディなプログラミング言語では、ロジックプログラミングは別の名前で存在しますか?回答のシニカルバージョンは、 Python Paradox のバリアントですか?
解決
プロトタイピング。
プロローグは動的であり、50年になります。コンパイラはリベラルであり、構文のミニマリストであり、「物事を行う」ことです。簡単、楽しく、効率的です。 SWI-Prologにはトレーサー(デバッガー)、さらにはグラフィカルトレーサー。 make / 0
を使用してコードをオンザフライで変更したり、モジュールを動的にロードしたり、インタープリターを終了せずに数行のコードを追加したり、現在オンザフライで実行しているファイルを編集したりできます edit(1)
で。 foobar / 2
述語で問題を発見したと思いますか?
?- edit(foobar).
そして、エディタを離れるとすぐに、そのことは再コンパイルされます。もちろん、EclipseはJavaでも同じことを行いますが、Javaはプロトタイプ言語ではありません。
純粋なプロトタイピングのほかに、Prologはロジックをコードに変換するために非常に適しています。そのため、自動検証およびそのタイプのものは、Prologで簡単に記述できます。
最初のErlangインタープリターはPrologで作成されました-そして、理由は、 Prologは解析ツリーで見つけたロジックの解析とエンコードに非常に適しているためです。実際、Prologにはパーサーが組み込まれています!いいえ、ライブラリではなく、構文にあります。つまり、 DCG sです。 。
プロローグは NLPで、特に構文および計算セマンティクスで多く使用されています。
しかし、プロローグは十分に活用されておらず、過小評価されています。残念ながら、アカデミックまたは「実際の目的には使用できません」と思われます。スティグマ。ただし、ファクトおよびファクト間の関係の計算を含む多くの実世界のアプリケーションで非常に有効に使用できます。数値の計算にはあまり適していませんが、CSは数値の計算だけではありません。
他のヒント
制約論理プログラミング(CLP)
ロジックプログラミングの非常に優れた、適切なユースケースの多くがすでに言及されています。ロジックプログラミングの非常に重要なアプリケーション領域のいくつかのタスクで、既存のリストを補完したいと思います。
論理プログラミングは、他のパラダイムよりシームレスに、制約と融合し、制約論理プログラミングと呼ばれるフレームワークになります。
これにより、次のような異なるドメインの専用の制約ソルバーになります。
- 整数用のCLP(FD)
- CLP(B) ブール値の場合
- CLP(Q) 有理数番号の場合
- CLP(R)は浮動小数点番号用。
これらの専用の制約ソルバーは、言及されていないロジックプログラミングのいくつかの重要なユースケースを導きます。その一部を以下に示します。
Prologシステムを選択する場合、その制約ソルバーの能力と性能は、特に商用ユーザーにとって、多くの場合決定要因の1つです。
CLP(FD)—整数の推論
実際には、CLP(FD)はロジックプログラミングの最も重要なアプリケーションの1つであり、とりわけ以下の分野のタスクを解決するために使用されます。
- スケジューリング
- リソースの割り当て
- 計画
- 組み合わせ最適化
clpfd をご覧ください。 >詳細およびいくつかの例については。
CLP(B)—ブール制約
CLP(B)は、多くの場合に関連して使用されます:
- SAT解答
- 回路検証
- 組み合わせカウント
clpb を参照してください。
CLP(Q)—有理数
CLP(Q)は、 Operations  Research で発生する重要なクラスの問題を解決するために使用されます。
- 線形プログラミング
- 整数線形計画法
- 混合整数線形計画法
clpq を参照してください。
Prologは、数値以外の問題に最適です。この記事は、Prologのいくつかのアプリケーションの例を示しており、問題の種類を理解するのに役立つかもしれません解決するかもしれません。
Prologが無料で提供するものの1つに、バックトラッキング検索アルゴリズムがあります-自分で実装することもできますが、そのアルゴリズムを使用可能にすることで問題を解決できる場合は、それを使用すると便利です。
これが得意とする2つのことは、数学的な証明と自然言語の理解です。
Prologは、パズルなどの解決に優れています。つまり、パズル解決の分野では、簡単/中程度のパズル解決がより簡単になり、複雑なパズルの解決が難しくなります。それでも、Hexiom、Sudoku、Nurikabeなどのグリッドパズルなどのソルバーを書くことは、特に難しくありません。
1つの簡単な答えは、「システムの構築」です。 Makefileの構築に使用される言語(少なくとも、依存関係を記述する部分)は、本質的に論理プログラミング言語ですが、実際には「純粋」ではありません。論理プログラミング言語。