アカウント名:
パスワード:
プログラミング言語の文法は所詮UIでしょう。UIが実作業において生産性に影響を及ぼすのは間違いないし、UI談義がそれ自身気楽で楽しいことも否定しませんが、現代のプログラミング言語処理系として大事なのはその「UI」を介して表された抽象的なモデル(オブジェクトであれ、論理規則であれ)を高速に実行するための最適化の能力を備えることでしょう。(あるいはそういう最適化に有用なヒントを提供しつつ、かつ記述能力を高めるような抽象化方式の発見。)
(UIが大事な言語ももちろんありましょう。例えばスクリプト言語はしばしば「糊(グルー)」と評さ
「バックトラックがあかん」としても(これにも異論があるけど、別の話になるのでここでは書きません)、それでいえるのは、だから Prolog はあかんであって、論理型言語はあかんにはなりません。 Prologの性質を論理型言語一般の性質と混同してはいけません。バックトラックしない論理型言語も多数あります。
ロジックプログラミングの理論的基礎である導出原理は非決定性アルゴリズムなので、そのままでは実装できません。そこで、バックトラックを使って代用しているのがPrologです。要するに、非決定性探索ができないから、かわりに深さ優先探索を採用したのです。しかし、深さ優先探索だけが探索アルゴリズムではありません。幅優先探索もあります。Or並列を使えば幅優先探索を非決定性探索の代用として導出を実装することも可能であり、実際、そのような論理型言語も多数存在します。デカルトの作者さんが衝撃を受けたというGHCも、その系統に属します。
ところで、探索では適切な枝刈りが威力を発揮します。Prologで探索の枝刈りを実現しているのがカットですが、どの枝が刈られているのか、いまひとつわかりにくい欠点があります。その問題は、Parlog, Concurrent Prolog, GHC など committed-choice 系論理型言語では解決されています。これらの言語ではガードと呼ばれる機能を使って探索の枝刈りを実現しますが、それは、いったん枝分かれした後でこの枝を残してあとは刈るという形で書けるので、どの枝が刈られるのかをわかり易く書くことができます。
結論としては、Kandoさんの主張を認めるとしても、それからいえるのは「Prologはあかん」であって、それを論理型言語すべてに拡げることはできない、したがって、デカルト言語に適用できるかどうかは不明、ということです。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー
大事なのは最適化 (スコア:3, すばらしい洞察)
プログラミング言語の文法は所詮UIでしょう。
UIが実作業において生産性に影響を及ぼすのは間違いないし、UI談義がそれ自身気楽で楽しいことも否定しませんが、現代のプログラミング言語処理系として大事なのはその「UI」を介して表された抽象的なモデル(オブジェクトであれ、論理規則であれ)を高速に実行するための最適化の能力を備えることでしょう。(あるいはそういう最適化に有用なヒントを提供しつつ、かつ記述能力を高めるような抽象化方式の発見。)
(UIが大事な言語ももちろんありましょう。例えばスクリプト言語はしばしば「糊(グルー)」と評さ
バックトラッキングはロジックプログラミングに本質的でない(Prologには本質的だけど) (スコア:2)
「バックトラックがあかん」としても(これにも異論があるけど、別の話になるのでここでは書きません)、それでいえるのは、だから Prolog はあかんであって、論理型言語はあかんにはなりません。 Prologの性質を論理型言語一般の性質と混同してはいけません。バックトラックしない論理型言語も多数あります。
ロジックプログラミングの理論的基礎である導出原理は非決定性アルゴリズムなので、そのままでは実装できません。そこで、バックトラックを使って代用しているのがPrologです。要するに、非決定性探索ができないから、かわりに深さ優先探索を採用したのです。しかし、深さ優先探索だけが探索アルゴリズムではありません。幅優先探索もあります。Or並列を使えば幅優先探索を非決定性探索の代用として導出を実装することも可能であり、実際、そのような論理型言語も多数存在します。デカルトの作者さんが衝撃を受けたというGHCも、その系統に属します。
ところで、探索では適切な枝刈りが威力を発揮します。Prologで探索の枝刈りを実現しているのがカットですが、どの枝が刈られているのか、いまひとつわかりにくい欠点があります。その問題は、Parlog, Concurrent Prolog, GHC など committed-choice 系論理型言語では解決されています。これらの言語ではガードと呼ばれる機能を使って探索の枝刈りを実現しますが、それは、いったん枝分かれした後でこの枝を残してあとは刈るという形で書けるので、どの枝が刈られるのかをわかり易く書くことができます。
結論としては、Kandoさんの主張を認めるとしても、それからいえるのは「Prologはあかん」であって、それを論理型言語すべてに拡げることはできない、したがって、デカルト言語に適用できるかどうかは不明、ということです。