Prolog の思い出
中村正三郎の HOT CORNER : Erlang, Oz/Mozart, Prolog, 単一化 ― 2008年01月02日 10時05分40秒
僕は,平成 14 年 (2002 年) に入学した,岩手県立大学の第 5 期生なんですよね.
# 高校生当時はもちろんそんな用語は知らなかったのですが,今で言う所の,セマンティックウェブやテキストマイニング的な知的システムを作りたくて,自己推薦 (AO)入試で合格しました.中学高校と全然勉強してなかった上に,物理を取ってなかったので,事実上 AI の研究をしたかったら,他に選択肢があまりなかった,というのもあります (通常の国公立大学の工学部の知能 (知識) 情報系ってのは,物理必修がほとんど)
そして,最初に配属されたのが,まさしく ↑サイトの執筆者である槫松先生がいる藤田1研でした (岩手県立大学は,学部1年から研究室に配属され,1人1台 SUN の SPARC WS が割り当てられる (当時))
その後,同じ知能コースのゴウタム研 (旧藤田2研) に進んで,自然言語処理の研究をするなどしようと思ったわけですが,プログラミング方法論や言語の貧弱さに限界を感じ,より基本的な方面の研究を行うために,修士からは北海道大学の現在の研究室に進学し,現在に至るわけです.
# ちなみに,昨日,無事修士を終了することができました.4 月からは博士課程に進みます.
思いっきり脱線しましたが,学部 3 年の時,コース科目の 「知能機械と自然言語処理」 で,槫松先生にはいろいろお世話になりました.簡単な自然言語の文法パーザ (要するに,曖昧性を含み,パース結果の構文木が一意に定まらないような文法) を作るという課題の時,言語は問わないということだったので,C とかでバックトラックから実装するのはしんどすぎるということで,全く未知の言語であった Prolog に挑戦しました (ゆとり教育の波で,僕の世代は大幅にカリキュラムが削られ,共通演習では C しか習いませんでした.その後,各コースの特性に合わせて,いろいろな言語を独習していくことになります)その時は,m.hiroi さんの Prolog Programming が参考になりました.
正三郎さんも言っているように,関数プログラミングはある程度市民権を得た感じですが,それだけでは片手落ちだと思いますね.例えば onLisp なんかも,Prolog のインタプリタを作るという入門以前のところで終わりなわけですが,Prolog の技芸とかを読むと, Prolog の長い歴史で培われてきた豊かな世界を垣間見ることができると思います.昔の Prolog ブームの時には,他にも大量の日本語の本が出たわけですが,軒並み絶版になってるが惜しいところですね.Prolog の技芸の日本語版は版が古い上に絶版ですが,原著の The Art of Prologはまだあります.
Prolog が寂れた理由については,AI バブルの反動とか,計算モデル自体の限界とかいろいろ非本質的/本質的両面の理由があるのですが.関数プログラミングの方が低水準 (汎用的,基本的) な理論なので,現在でも生き残ってるわけです (Prolog が遅い遅い言われるのは,Prolog が悪いのではなく,むしろ簡単にウルトラハイレベルなコードを書ける,というその特性によるものも多いと思います.同じことを C とか Java とか Lisp とかでやろうと思ったら,やっぱり同じくらい非効率なコードを書くしかなくなります.なので遅いこと自体が悪いのではなく,そこからのチューニングのための手段に乏しいことが悪い).
そんなこんなで,論理プログラミングから入り,その限界を感じ,現在はそれを根本から克服するための研究をしているので,Prolog に対しては愛憎両面の複雑な感情を持っています.
もちろん論理プログラミングや関数プログラミングという枠組みでも,まだまだ面白い研究はできると思います.しかし,もうそういう狭いパラダイムの区別や慣習自体が古いんじゃないかなぁと.まだ黎明期には,他の研究分野との区別のための意味があったとはいえ,「論理」プログラミングや「関数」プログラミングという,歴史に由来する名前自体が重荷や偏見の原因になりつつあると思います.そろそろ,そういう過去にとらわれず,分野に分かれた研究成果を統合し,より高いレベルの知的プログラミングのための枠組みが必要なのではないかと思います.
Prologの入門として、今回発見したのが、
http://www.fujita.soft.iwate-pu.ac.jp/prof_dir/kure/Lecture/Prolog/
岩手県立大学の平成14年度「知能システム学」Prolog編という講義資料。
岩手県立大学は、できて2、3年のときにお邪魔したことがある。非常にきれいなキャンパスだった。
これを書いた槫松(くれまつ)先生の講義のページ
http://www.fujita.soft.iwate-pu.ac.jp/prof_dir/kure/lectures.html
をみると、過去の資料扱いになっているから、もう、直接はPrologは教えてな
いかもしれないね。でも、ちゃんと
http://www.fujita.soft.iwate-pu.ac.jp/prof_dir/kure/Lecture/Lisp/lisptop.html
に、Lispもある。
関数型Lispと論理型Prologの両方を教えている! これがまっとうなカリキュラムだよ。\(^O^)/
いまは自然言語処理のほうの授業に力を入れているようだが、そういう方面をやると、LispやProlog的なものはやらざるを得ないから、その過程で独習させているのかもしれない。
僕は,平成 14 年 (2002 年) に入学した,岩手県立大学の第 5 期生なんですよね.
# 高校生当時はもちろんそんな用語は知らなかったのですが,今で言う所の,セマンティックウェブやテキストマイニング的な知的システムを作りたくて,自己推薦 (AO)入試で合格しました.中学高校と全然勉強してなかった上に,物理を取ってなかったので,事実上 AI の研究をしたかったら,他に選択肢があまりなかった,というのもあります (通常の国公立大学の工学部の知能 (知識) 情報系ってのは,物理必修がほとんど)
そして,最初に配属されたのが,まさしく ↑サイトの執筆者である槫松先生がいる藤田1研でした (岩手県立大学は,学部1年から研究室に配属され,1人1台 SUN の SPARC WS が割り当てられる (当時))
その後,同じ知能コースのゴウタム研 (旧藤田2研) に進んで,自然言語処理の研究をするなどしようと思ったわけですが,プログラミング方法論や言語の貧弱さに限界を感じ,より基本的な方面の研究を行うために,修士からは北海道大学の現在の研究室に進学し,現在に至るわけです.
# ちなみに,昨日,無事修士を終了することができました.4 月からは博士課程に進みます.
思いっきり脱線しましたが,学部 3 年の時,コース科目の 「知能機械と自然言語処理」 で,槫松先生にはいろいろお世話になりました.簡単な自然言語の文法パーザ (要するに,曖昧性を含み,パース結果の構文木が一意に定まらないような文法) を作るという課題の時,言語は問わないということだったので,C とかでバックトラックから実装するのはしんどすぎるということで,全く未知の言語であった Prolog に挑戦しました (ゆとり教育の波で,僕の世代は大幅にカリキュラムが削られ,共通演習では C しか習いませんでした.その後,各コースの特性に合わせて,いろいろな言語を独習していくことになります)その時は,m.hiroi さんの Prolog Programming が参考になりました.
正三郎さんも言っているように,関数プログラミングはある程度市民権を得た感じですが,それだけでは片手落ちだと思いますね.例えば onLisp なんかも,Prolog のインタプリタを作るという入門以前のところで終わりなわけですが,Prolog の技芸とかを読むと, Prolog の長い歴史で培われてきた豊かな世界を垣間見ることができると思います.昔の Prolog ブームの時には,他にも大量の日本語の本が出たわけですが,軒並み絶版になってるが惜しいところですね.Prolog の技芸の日本語版は版が古い上に絶版ですが,原著の The Art of Prologはまだあります.
Prolog が寂れた理由については,AI バブルの反動とか,計算モデル自体の限界とかいろいろ非本質的/本質的両面の理由があるのですが.関数プログラミングの方が低水準 (汎用的,基本的) な理論なので,現在でも生き残ってるわけです (Prolog が遅い遅い言われるのは,Prolog が悪いのではなく,むしろ簡単にウルトラハイレベルなコードを書ける,というその特性によるものも多いと思います.同じことを C とか Java とか Lisp とかでやろうと思ったら,やっぱり同じくらい非効率なコードを書くしかなくなります.なので遅いこと自体が悪いのではなく,そこからのチューニングのための手段に乏しいことが悪い).
そんなこんなで,論理プログラミングから入り,その限界を感じ,現在はそれを根本から克服するための研究をしているので,Prolog に対しては愛憎両面の複雑な感情を持っています.
ヒビルテ : λ. Kowalskiの講演をまた聞き逃す
あろはさんなどはよく論理プログラムをDISってるけどw、論理プログラミングにも面白い話はまだまだ沢山あるように思う。
もちろん論理プログラミングや関数プログラミングという枠組みでも,まだまだ面白い研究はできると思います.しかし,もうそういう狭いパラダイムの区別や慣習自体が古いんじゃないかなぁと.まだ黎明期には,他の研究分野との区別のための意味があったとはいえ,「論理」プログラミングや「関数」プログラミングという,歴史に由来する名前自体が重荷や偏見の原因になりつつあると思います.そろそろ,そういう過去にとらわれず,分野に分かれた研究成果を統合し,より高いレベルの知的プログラミングのための枠組みが必要なのではないかと思います.
