Lisp (1958年)(リスプ)
Lispは1958年MITジョン・マッカーシー (John McCarthy) が開発した世界初の関数型プログラミング言語でAI 研究・Symbolic Programming・S 式 (S-expression) ・動的型付け採用しProlog・Scheme・Common Lisp・Clojure 等の関数型言語の祖先となった歴史的言語。
Lisp (1958年)
概要
Lispは1958年MITジョン・マッカーシー (John McCarthy・後Stanford AI Lab 創設者・1971年Turing Award) が開発した世界初の関数型プログラミング言語でAI (Artificial Intelligence) 研究のため設計・Symbolic Programming (記号処理) ・S 式 (S-expression・括弧で囲まれたリスト) ・動的型付け・自動メモリ管理 (Garbage Collection 世界初) ・First-class Function (関数を値として扱える) ・Macro (コード生成メタプログラミング) 採用しProlog (1972年) ・Scheme (1975年MIT Sussman/Steele) ・Common Lisp (1984年ANSI 標準化) ・Clojure (2007年Rich Hickey・JVM ベース)・JavaScript (1995年・Brendan Eich 「Lisp の影響受けた」公言) ・Python (1991年・関数型機能) 等の言語の祖先となった歴史的言語。1959-1980年代AI ブーム期に主流・1990年代以降衰退も2010年代Clojure で復活。
主な特徴・仕組み
- 発表: 1958年MIT・John McCarthy・「Recursive Functions of Symbolic Expressions and Their Computation by Machine」論文
- 元代名: 「LISt Processor」(リスト処理)
- 言語パラダイム: 関数型 (世界初) ・Symbolic Programming・Dynamic Typing
- 構文: S 式 ( (function arg1 arg2) ・括弧優位)・括弧 (parentheses) 多用
- GC (Garbage Collection): 世界初 (自動メモリ管理・後Java/Python/JavaScript 採用)
- マクロ: コード生成メタプログラミング (S 式自身が言語データ)
- REPL: Read-Eval-Print Loop (対話型) 世界初・1960年代から
- 方言: Maclisp (1966)・InterLisp (1967)・Scheme (1975)・Common Lisp (1984)・Emacs Lisp (1985)・Clojure (2007)
Lisp 主要方言の系譜
| 方言 | 年 | 開発者 | 主な用途 |
|---|---|---|---|
| Lisp 1.5 | 1962 | MIT | AI 研究初期 |
| Maclisp | 1966 | MIT AI Lab | Macsyma (数式処理・後Mathematica 祖先) |
| InterLisp | 1967 | BBN→Xerox PARC | AI 研究 |
| Scheme | 1975 | MIT Sussman/Steele | 教育・実用言語 |
| Common Lisp | 1984 | Guy Steele 主導 ANSI | 工業標準 (現在も主流) |
| Emacs Lisp | 1985 | Richard Stallman | Emacs エディタの拡張言語 |
| Racket (旧PLT Scheme) | 1994 | Matthias Felleisen | 教育・関数型研究 |
| Clojure | 2007 | Rich Hickey | JVM ベース・関数型復活 |
| Hy | 2013 | Paul Tagliamonte | Python AST 上のLisp |
S 式 (S-expression) 革新
Lisp の特徴的構文:
- 構造: ( function arg1 arg2 ... ) の入れ子リスト
- 例: (+ 1 2 3) → 6・(if (> x 0) "positive" "negative")
- メリット: 構文と AST (抽象構文木) が一致・マクロでコード生成容易
- デメリット: 括弧多用 ("LISP = Lots of Irritating Stupid Parentheses" 揶揄)
- 業界影響: 関数型言語 (Haskell・F#) ・JavaScript・Python の式表現に影響
Garbage Collection (世界初)
1958年Lisp で初対応:
- 動作: 不要メモリを自動的に解放・プログラマがmalloc/free 不要
- 競合: C (1972年) ・C++ (1985年) は手動メモリ管理・GC 採用は2000年代以降
- 後継: Java (1995年) ・C# (2002年) ・Python (1991年) ・JavaScript (V8 2008年) ・Go (2009年) ・全現代言語で標準
AI ブーム期 (1956-1980年代)
1956年ダートマス会議 (AI 創出) からLisp の黄金期:
- 1956年Dartmouth Conference: AI 用語誕生 (John McCarthy 命名)
- 1958-1980年代Lisp Machines: AI 専用ワークステーション (Symbolics・LMI・TI Explorer)
- 代表的AI システム: SHRDLU (1968年)・MYCIN (1976年医療診断)・MIT AI Lab
- AI 冬の時代 (1987年-): Lisp Machine 失敗・Lisp 衰退
- 2010年代AI 再興: Python (TensorFlow/PyTorch) 主流・Lisp は教育・関数型復活で生存
採用システム (1960-2010年代)
- 1958-1980年代AI 研究: MIT・Stanford・Carnegie Mellon・SRI International の AI 研究所
- Emacs エディタ (1976年): Richard Stallman・Emacs Lisp で拡張可能
- AutoCAD (1980年代): AutoLISP で拡張機能 (現代も継続)
- Google AdWords: 初期 (2003年) は Lisp ベース・2010年代Java 移行
- NASA Mars Pathfinder (1997年): 一部Common Lisp 採用
- Hacker News (2007年Paul Graham): Arc (Lisp 方言) ベース
- 2010年代Clojure: Walmart・Apple・Cisco・Citigroup 採用
関連技術との違い
| 項目 | Lisp (1958) | Fortran (1957) | C (1972) | Python (1991) |
|---|---|---|---|---|
| パラダイム | 関数型 (世界初) | 命令型 (数値計算) | 命令型 (システム) | マルチパラダイム |
| 型付け | 動的 | 静的 | 静的 | 動的 |
| GC | あり (世界初) | なし | なし | あり |
| 用途 | AI 研究・関数型 | 科学技術計算 | システムプログラミング | 汎用・データサイエンス |
| 構文 | S 式 (括弧) | Fortran 式 | C 風 | インデント |
よくある質問 (FAQ)
Q1: なぜLisp は AI 研究で使われたか? A: (1) Symbolic Programming (記号処理) で論理推論・知識表現に最適・(2) First-class Function でメタプログラミング容易 (AI は自己改変プログラム必要)・(3) S 式とAST が一致でコード生成柔軟・(4) GC で大規模データ構造管理容易・(5) Lisp Machines (AI 専用HW・1980年代) でAI 性能優位・全要因で「AI = Lisp」と1956-1990年代評価された。
Q2: 現代でLisp はどこで使われているか? A: (1) Emacs Lisp (Emacs エディタ 1976年-2024年継続) ・(2) AutoCAD AutoLISP (1980年-現代継続) ・(3) Clojure (2007年-・Walmart/Apple/Cisco) ・(4) Common Lisp 商用 (Allegro CL・LispWorks) ・(5) Scheme/Racket (大学MIT/Northwestern 教育) ・(6) Hacker News (Arc Lisp 方言) ・(7) ITA Software (Google 買収・航空券検索) ・(8) Grammarly (一部Clojure 採用) 等。
Q3: Lisp を学ぶ価値は? A: 関数型プログラミングの基礎・現代言語 (Python/JavaScript/Ruby) の関数型機能の理解・メタプログラミング/マクロの概念・Computer Science 教育標準 (SICP「コンピュータプログラムの構造と解釈」MIT Press 1985年Sussman/Abelson 教科書) 。直接Lisp 採用機会少ないが思考訓練で他言語へ応用可能。
まとめ
- 1958年MITジョン・マッカーシー開発
- 世界初の関数型プログラミング言語
- S 式・動的型付け・GC 世界初
- AI 研究のため設計
- Clojure/Scheme/Common Lisp 祖先