Page 1
Lispは関数型言語
(ではない)
Lisp is (not) a functional language
pixiv Inc.
USAMI Kenta
2025-06-15 #fp_matsuri
関数型まつり 2025
公開日:
by USAMI Kenta@tadsan
Lispは関数型言語
(ではない)
Lisp is (not) a functional language
pixiv Inc.
USAMI Kenta
2025-06-15 #fp_matsuri
関数型まつり 2025
お前誰よ
私とλ
楽しみましたか?
Scott Wlaschinさんの招待講演、最高でしたね…
関数型言語
使ってますか?
関数型プログラミング
してますか?
みなさまそれぞれの
「関数型」観が あると思います
map/reduceが 使えたら関数型?
λ関数型言語とはλ
(私の偏見に基く認識)
ML系
Haskell
日本人も漢字使ってるし 中国語読めるでしょ?
関数型得意だし
Lisp書けるでしょ?
いやいや…
厳しい…
それくらい 「関数型」
アプローチは多様
Lispで
「関数プログラミング」
してますか?
Lisp族の中ですら
言語 ごとに
(方言)
文化が違う
みなさんは
Lispを
ご存じですか
出典: フリー百科事典『ウィキペディア(Wikipedia)』 関数型プログラミング より引用
1958年登場の言語
(現役では最古級)
C言語
puts("foo")
Ruby
puts "foo"
Lisp
(puts "foo")
(imaginary)
(((((LISP)))))
(((カッコが多い)))
カッコだらけの構文
(S式)
結構ひとによって
印象が違う
言語だと思う
(Lispって結局何-p)
虚実に包まれたLisp
ということで
関数型言語
(じゃないの!??)
話をきいてください
そもそも
関数型って
なんだ
「関数型」と呼んだのは
ジョンバッカス
(1977年)
“Can programming be liberated from the von Neumann style?: a functional style
and its algebra of programs: Communications of the ACM: Vol 21, No 8”より引用
combinatory logic
コンビネータ論理
(1929年-)
λ-calculus
ラムダ計算 (1930年代-)
(λ計算)
λx.λy.x
(Haskell)
λx.λy.x
\x -> \y => \x
(const)
(JavaScript)
λx.λy.x
x => y => x
λx.λy.x
(太古のJavaScript)
function (x) {
return function (y) {
return x;
};
};
(PHP)
λx.λy.x
fn($x) => fn($y) => $x
単純型なしλ計算は チューリング完全で
あることが知られている
関数と適用しかないが
工夫して制御構造も データ構造も作れる
こういう積み重ねで 現代の関数型っぽい
要素が整理された
レキシカルスコープとか 不変性とかカリー化とか
型推論とか代数的データ型
とか遅延評価とかモナドとか
関数合成とか参照透過とか
で、Lispはどういう
関数型言語なの?
λ関数型言語とはλ
(私の偏見に基く認識)
ML系
Haskell
関数型的な主観だけで
比較してしまうと
LispとPHPは同等
Lispは関数型言語
ではない
NOT
Lisp is a functional language
pixiv Inc.
USAMI Kenta
2025-06-15 #fp_matsuri
関数型まつり 2025
λ-calculus
ラムダ計算 (1930年代-)
LISPは
ラムダ計算の 実装ではない
(すくなくとも初期は)
LISPと変数スコープ
(PHP)
λx.λy.x
fn($x) => fn($y) => $x
(Scheme)
λx.λy.x
(lambda (x) (lambda (y)
x))
(Racket)
λx.λy.x
(λ (x) (λ(y) x))
Lispでも
ラムダ計算できるが
書きやすくはない
関数の純粋性を
担保する仕組みが
不足している
とはいえ
関数プログラミングの
道具は揃っている
その道具を
どう使うかによって
Lispの文化がある
LISPとLisp系言語
機能的には
どのLispでも
他のスタイルで書ける
「初めての人のためのLISP [増補改訂版]」 より引用
竹内郁雄著, 2010年3月9日 初版第1刷発行, 翔泳社刊
(電子書籍版を底本とする)
Lispは関数型言語
ではないが
能力と文化によって
実現している
_人人人人人人人_ > Lispは雑草 <  ̄Y^Y^Y^Y^Y^ ̄
Emacs Lisp
広く普及したLispでありながら Lispらしくないと敬遠された
歴史的経緯の塊
Emacs Lispの弱点
Emacs Lisp
(elisp)
Emacs
Emacs Lispの弱点
Emacs Lisp
かつては不出来な末っ子扱い 現在は必死に追い上げている
Lispは
マルチパラダイム
Lisp Machine
AIブームを牽引した専用機
(1970年代後半-)
そういう機械が
40年以上前にあった
「Multi-Paradigm Language TAO」より引用
https://www.nue.org/nue/tao/bitao/s001.html
この写真は国産LISPマシンのELIS なので本家Emacsの開発経緯とは直 接関係ないのだが内蔵されたZENと いうEmacs風独自エディタの日本語 入力メソッドKanzenが後のSKKに 繋がりIME史に影響を及ぼしている
TAO/ELISの
特徴は現代Lispには 受け継がれていない
どのLispも多かれ
少なかれ
マルチパラダイム
Lispは
関数型の枠に
留まっていない
Lispのパワーの根源は
S式・マクロ
Lisp一族の
雑草のような生命力に
ご期待ください!
