ErlangはPrologに基づいているので、これはErlangが制約論理言語であることを意味しますか?
ErlangにはPrologのビルディングブロックがありますか:ファクト、ルール、クエリ
4 に答える
いいえ。
Erlang の構文は Prolog の構文と非常に似ていますが、セマンティクスは大きく異なります。Erlang の初期のバージョンは Prolog を使用して書かれていましたが、今日の Erlang はもはや「Prolog に基づいている」とは意味がありません。
Erlang には、ロジック プログラミングに通常使用される Prolog のバックトラッキングやその他の機能は含まれていません。もちろん、他の言語の上に Prolog を実装することもできます。Erlang は他の言語よりも簡単に選択できます。これは、Robert Virding の「Erlog」プロジェクトで確認できます。
はい。
Erlang の最初のバージョンは Prolog ではなく、コミットされた選択のロジック プログラミング言語の 1 つで書かれていました。これらの言語では、Prolog のバックトラッキングが廃止されたため、「コミットされた選択」という名前が付けられました。これは、選択が行われると、バックトラックして別の選択を試みることができなかったことを意味します。これは、論理プログラミングの形式を並行して作成することを簡素化するために行われました。別の見方をすると、並行プロセスは変数に制約を適用しますが、論理変数であるため再割り当てできないため、これらは値の変更ではなく、連続した制約になります。制約は、後で割り当てられる別の変数を含む変数に部分的な値を割り当てる場合があります。これは Erlang の基本モデルです。
Erlang の構文はそのロジック プログラミングの遺産を示していますが、Prolog から直接ではなく、Prolog から採用されたコミットされた選択ロジック プログラミング言語を通じてこれを採用したことを理解することが重要です。1980 年代にいくつかのコミットされた選択ロジック プログラミング言語が考案されましたが、それらは Prolog の影から抜け出すことができず、失敗した日本の第 5 世代イニシアチブとの関連によって、また口論した競合する開発者チームによって引き下げられました。わずかな違いのため、基準は確立されていません。
Erlang の開発者は、コードにより機能的な外観を与えるシンタックス シュガーを導入し、それをロジック プログラミング言語ではなく関数型プログラミング言語として宣伝するというマーケティング上の決定を下しました。 .
制約プログラミング スタイルで実装する方法として、Erlang のリスト内包表記機能を使用することもできます。
% Produce the tuple {1, 0}
%
constraint_test() -> [ {A, B} ||
A <- lists:seq(0, 1),
B <- lists:seq(0, 1),
A > B].
リスト (A <- lists:seq(0, 1)) と制約 (A > B) から取得した要素のジェネレーターを代わりに配置します。
最近、以下にリンクされている問題を解決しました。制約を正しく配置すれば、瞬時に答えが得られます。
http://www.geocaching.com/seek/cache_details.aspx?guid=a8605431-53b5-4c2c-97fb-d42ee299b167
要するに、そうではありません:)それらのビルディングブロックはありません。並行性、並列プログラミング、分散アプリケーション、およびフォールト トレランス (機能的で厳密な宣言型言語でありながら) に重点を置いています。