Lispとは 何か ---- プログラミングの 母なる海 ---- 東洋哲学を コンピュータ上で 具現 \(^O^)/ ---- 1958年最初の実装開始 最も古い言語の1つ (FORTRANの次に古い) ---- 理論基盤は λカリキュラス ---- シンタックスは S式 ---- 言語は 50年間 変わってない ---- よって Language Update なし! \(^O^)/ ---- これで終わっては あんまり^^; ---- だもんで Lispに対する 意識をUpdate \(^O^)/ ---- じゃ、 Schemeや Common Lispは 何? ---- ライブラリと マクロに 関する 停戦協定 \(^O^)/ ---- なぜ、 停戦協定が 必要なの? ---- あまりに自由なので みんな 好き放題やった ---- 人の数だけ Lispができた ---- 内戦が続いて 嫌気がさした ↓ 停戦協定必要 \(^O^)/ ---- Lispの魅力は? ---- 計算の 本質に迫れる 表現力 変幻自在 数学的基盤 ---- パンピーには 難しい ---- でも 頭のいい人には ピッタリ! ---- 頭のいい人が 先進的アイデアを Lispで 実装してきた ---- わしらパンピーは おこぼれを もらってきた \(^O^)/ ---- なお、 パンピーには、 ---- Unix屋 Apple, Sun Microsft, Googleを 含む \(^O^)/ ---- Lispが開拓した 数々のアイデア プログラミング技法 プログラミングスタイル 高水準言語マシン ---- プログラミング技法 ================== ガベージコレクション map/reduce Googleの基盤 高階関数 関数閉包(クロージャ、closure) 継続(continuation) ---- プログラミングスタイル ====================== 関数型 論理型 オブジェクト指向 マルチパラダイム AI(人工知能) AOP(アスペクト指向) ---- これらを マクロと 関数を使って Lispの枠内で 実装 ---- 関数型プログラミング ==================== 本家本元 汚れてしまったけど ^^; ---- 論理型プログラミング ==================== Prologを Lispで実装 ---- オブジェクト指向プログラミング ============================== 先進的オブジェクト指向 LispマシンのFlavors CLOS (Common Lisp Object System) MOP (Meta Object Protocol) ---- マルチパラダイムプログラミング ============================== 関数型、 論理型、 オブジェクト指向を 自由に混在させて書く ---- AI(人工知能) プログラミング ========================== 本家本元 ---- AOP(アスペクト指向) ================================ AOPの提唱者 Gregor Kiczalesは MOPの提唱者 MOPをJavaでやったら、 ああいう醜いものになる :-) ---- 高水準言語マシン ================ Lispマシン Lispを 直接ハードウェアが 実行 竹内先生のELIS Symbolics ---- Lispじゃないけど 第5世代コンピュータ Prologを拡張した 並列言語KL1を 直接ハードウェアが 実行 ---- 第5世代コンピュータの プロジェクトリーダー 淵先生がお亡くなりになった 合掌 ---- もっと昔には FORTRAN, ALGOLなどの 高水準言語マシンもあった バローズのマシン ---- メインフレーム、 ミニコンなど 一般のCISCマシンは COBOLマシン :-) ---- Lispの生命力の根源は? 母なる海たる理由は? 仏教哲学の具現たる理由は? ---- 統一されたシンタックス 動的言語 強烈なマクロ ---- これらが 組み合わさって ↓ Lispは プログラム可能な プログラミング言語 ---- Lispは 無限小の核言語 + 無限大の拡張性 ---- 別の言い方をすると 極小の 基本メカニズム + 膨大な シンタックスシュガー ---- 統一されたシンタックス ==================== S式 プログラム=データ ---- 実は、 シンタックスなど ほとんどない あるのは、 ( と ) だけ \(^O^)/ ---- ( と ) さえあれば、 その間に 何を入れてもいい 好きに解釈していい ---- 仏教哲学風解釈 ()は 無であり、 同時に 全てを含む ---- 色即是空 空即是色 \(^O^)/ ---- プロレス流に 噛み砕くと ---- ルール無用の ジャングル \(^O^)/ ---- 母なる海たる所以は? ---- 水には 決まった形がない ---- どんな形にも なれる! ---- あらゆる 可能性が ある! ---- あらゆる 生命を 生み出せる! ---- トンデモ本を ご存知なら ---- 水は答えを知っている \(^O^)/ ---- 以上により ---- すべての プログラミング言語は Lispの 模倣 または 変種 である \(^O^)/ ---- 中村の個人的見解 Rubyは AlgolシンタックスのLisp JavaScriptは CシンタックスのLisp ---- 動的言語 ======== 型システムが動的 システム全体が動的 ---- 型システムが動的とは 型を実行時に判定 ---- システム全体が 動的とは 実行時に 言語の中枢部 そのものさえ 変更可能 なぜなら ---- 中枢部といっても 所詮Lispのデータ よって 好きに書き換えてよい \(^O^)/ ---- たとえば CLOSのメカニズムも 動的に書き換えてよい ↓ そのプロトコルがMOP ---- すべてはダイナミック 仏教哲学の真髄 \(^O^)/ ---- 強烈なマクロ ============ 自分自身を 切った張ったできる ↓ S式は、 構文木そのもの \(^O^)/ ↓ ---- 新しい制御構造や 好きな文法を作れる ↓ シンタックスシュガー 定義し放題 ↓ プログラム可能な プログラミング言語 ↓ DSLに最適 ---- DSL (Domain Specific Language) ========================== マクロのおかげで DSLはお手の物 っていうか、 ---- Lisperは、 DSLという言葉を 知らずに? マクロを使って DSLばかり やってきた ---- AIしかり Prologしかり CLOSしかり その他いっぱい ---- 何でも Lispの中に DSLとして 飲み込んできた ---- Lispに関する 誤解を解く ---- Lispは速い ========== 優秀なコンパイラ 個人的感覚でいえば、 ---- Cより少し遅くて C++より少し速くて Javaより3倍速く Perlより30倍速く Rubyより100倍速い \(^O^)/ ---- Lispは汎用言語 ============== 何でも書ける! ネットワークも XMLも なんでも来い! ビット演算だってある! ---- http://www.lispworks.com/ LispWorksなら クロスプラットフォームの GUIもOK ---- 暗黒面は? ---- Lisperは いつの時代も 少数民族 ^^; ---- 数学が できる人間は 少数 ---- 強力なパワーは 常人には扱えない ---- あり余る自由は 人を不安にする ---- 人間は 束縛される ほうが楽 ---- ジェダイは 少ない \(^O^)/ ---- なんだかんだいっても 負け惜しみ \(^O^)/ だって、世の中 ---- 泣泣泣泣泣泣泣泣泣泣泣 スクリプト言語の時代 泣泣泣泣泣泣泣泣泣泣泣 ---- そんな Lispの いま ---- 世の中 知のマイニングが 盛ん 知識情報処理 まっしぐら ---- 知のマイニング ============== 遺伝子のマイニング テキストマイニング (機械が論文を読む) その他あれこれ データマイニング ---- 知識情報処理 ============ オントロジー セマンティックWeb ウェブ3.0? ---- ちなみに ウェブ2.0は ウンコです \(^O^)/ ---- RDF/OWLは AIのフレームじゃん \(^O^)/ ---- 25年経って、 またAI? ---- AI屋 (Lisp屋, Prolog屋) は 大喜び \(^O^)/ ---- ということで、 いまのLispは、 ---- 再び 知のマイニングツール 知識情報処理ツール として復活!? ---- Googleだって Common Lispをお勉強 http://video.google.com/ videosearch?q=peter+seibel Practical Common Lisp by Peter Seibel ---- バイオインフォマティクス http://nostoc.stanford.edu/Docs/ BioBike http://nostoc.stanford.edu/Docs/#intro BioLisp ---- Allegro Cache ============= http://www.franz.com/ Franz社のオブジェクト永続記憶 http://www.franz.com/products/ allegrocache/ http://www.franz.com/resources/ educational_resources/ white_papers/index.lhtml ---- Allegro Graph ============= http://www.franz.com/ Franz社の超高速RDFデータベース http://www.franz.com/products/ allegrograph/ ---- RDB(Oracleなど) だと、 数百万から数千万 トリプルで 限界!? ---- Allegro Graph は 10億トリプル を処理!? ---- 予想以上に データのRDF化は 進んでいる 10億トリプルの 世界はすぐ? \(^O^)/ ---- クエリーは W3CのSPARQLも あるけど PrologでもOK ---- Lisp + Prolog なんと美しい世界 \(^O^)/ ---- 結論は ---- \(^O^)/\(^O^)/ AIバブルよ、 もう一度 \(^O^)/\(^O^)/
スライド開始