2013-07-16 2 views
9

私はPrologの力にかなり驚いていました。頭を浮かべるまでには時間がかかっていましたが、私にとってはそれがそこで最もクールな宣言的言語であるようでした。だからこそ、最近、Scalaを使った2年間の関数型プログラミングの2年後に、論理プログラミングをもう一度見て、実際の使用のために「自分の脳を鍛える」か、より良いものにすることに決めました。学習するのに最も有用で教示的な機能論理言語

宣言的パラダイムの両方の概念を習得するために、機能的プログラミングと論理的プログラミングを組み合わせることは魅力的なようです。私はまた、非常に便利で魅力的な強いタイプのシステムを見つけることができます。

Scalaは本当にinteropで輝きました。車輪を改造してはいけません。別のメイン言語でコードを呼び出すことができ、呼び出し可能であることが望ましいはずです。しかし、Javaである必要はありません。 Cやハスケルも大丈夫だろう。

これは今日最も有用で啓発的なFLP言語であり、あなたの意見や提案は何ですか?ここで

は、私がこれまでに見つけたものです:

  1. Mercury:クレームが高速であることを、強く型付けされたプロローグを。純粋な宣言的ですが、論理変数はありません!制約プログラミングはありませんか?最も広く使用されているFLPと思われます。 Interop?

  2. Curry:有望で最も進歩しているようですが、現在はドキュメントが少ししかありません。 「実験的」とはまだ未熟な/潜在する準備ができていないという意味ですか?ハスケルに基づいているか、実際にはハスケルとの相互運用性が高いですか?

  3. Ciao:私が望む多くの機能を提供しているようですが、1984年以来存在していますが、スタックオーバーフローはまったく分かりません。どうしたの? Interop?

  4. drools(java library/DSL):ハイブリッドフォワードおよびバックワードチェインを可能にすると主張しています。成熟した。 Java/Scalaとの直接の相互運用は可能ですが、変更可能なデータ/命令型の構造に頼っていますか?機能的なJVM言語との統合性はどれくらいですか?

  5. miniKanren:実装はいくつかのプラットフォームに存在します。 interopはどうですか?効率的ですか?

    1. Caledon:次のような

    2. ラムダPrologの実装は素敵なことが、重い理論かもしれません。使いやすさ? Haskellとの効果的な相互運用性?ドキュメンテーション?

    3. Teyjus。カレドンに似ています。

良い

が、理論的読み込み、カレーに偏っかつ実用的な懸念に対処ません:

+0

私は専門家ではありませんが、カレーは最も有望なものです。ハスケルのように見えますので、Prolog&Mercury(YMMV)よりも読みやすくなります。あなたはHaskellのように "普通の"純関数を書くことができます。あなたはそれからHaskellに電話することができます。 - まったく別のパラダイムではなく、強力なロジックと制約プログラミングの機能(機能パターンなど)が追加されたHaskellのように感じます。 –

答えて

4

私はあなたに(少し)偏見のあるカレーの勧告を与えることができます。

すでに述べたように、カレーはかなり進歩していますが、まだ実験段階ですが、使用する準備は間違いありません。すでに生産性の高いアプリケーションが使用されています。 Curryは主に研究言語であるため、実用的な面で多くの読解を見つけることはできません。しかし、そこに小さいながらも役立つコミュニティの読みがあるとカレーのメーリングリストに答える:相互運用性について

http://www-ps.informatik.uni-kiel.de/currywiki/documentation/mailing

、二つの選択肢があるように思える:ミュンスターカレーコンパイラ(MCC)は、Haskellの外国のサブセットをサポートしていますCコードを呼び出すための汎用インタフェースです。

最新のCurry実装Kiel Curry System 2(KiCS2)は、CurryをHaskellにコンパイルします。 KiCS2(KiCS2 Manual、付録Dを参照)を使用するとき、カスケードからHaskellコードを呼び出すための模式的な方法があります。残念ながら、私は カレーコードを別の言語から呼び出す方法について認識していません。

+1

答えがありがとう、カレーは私のお気に入りだった、面白いと思うが、これはまだ専門家ではない人にとって本当に準備ができていれば、私はまだ少し懐疑的だ。非学者のためにドキュメンテーションが適応され完成される可能性はありますか?私はマニュアルを調べていますが、かなり長いです。いくつかの紹介、実用的な入門とチュートリアル?これは非常に役に立ちます。 – ib84

+1

あなたの懐疑主義は合法だと思います。初心者向けのリソースはほとんどありません。私は最良のことは、例えば、http://learnyouahaskell.com/のようなHaskellのチュートリアルを探して、次にCurryとの違いを見ていることだと思います。 Wolfgang Jeltschは、最近、カリーに関するブログ記事を公開しました。これは参考になります:http://jeltsch.wordpress.com/2013/04/27/a-taste-of-curry/ また、いくつかの例がありますカレーのウェブページ: http://www.informatik.uni-kiel.de/~curry/examples/ – Fabian

+1

最近、セバスチャン・フィッシャーが最近開催したカレーのクラッシュコースを見てみたいです。http: //sebfisch.github.io/research/talks/CurryCrashCourse.pdf (対応するプログラム:http://sebfisch.github.com/research/talks/CurryCrashCourse.zip) – ichistmeinname

0

FPとLPの最も重要なネクサスは、私が見つけた限り、Mercury + Erlangです。両方とも、学術的観点から見て面白いです(どちらか一方、あるいは両方で良いことをしたいのであれば、あなたは基本的にまっすぐにする必要があります)が、どちらも製品を市場に出して維持することにプレミアムを与えます研究の奇妙さになる。

OPが "有益"に重み付けされているかどうかは分かりませんし、 "実用的な"とは "現実世界の問題を有効に解決するコード"を意味するかどうかもわかりません。しかし、これがここの基準の一部であると仮定すると、Mercury + Erlangは今のところLPとFPの最も興味深い組み合わせです。

関連する問題