Page 1
Lispは関数型言語
(ではない)
Lisp is (not) a functional language
pixiv Inc.
USAMI Kenta
2025-06-15 #fp_matsuri
関数型まつり 2025
公開日:
by USAMI Kenta@tadsan
に東京都中野区の中野セントラルパーク カンファレンスで開催された『関数型まつり2025』でレギュラートーク(30分)として発表しました。
2025-06-15 #fp_matsuri
関数型まつり 2025
お前誰よ
アルバイト先のF#マスターに単純型なしラムダ計算を教わる
関数型言語使ってますか?
関数型プログラミングしてますか?
みなさまそれぞれの「関数型」観があると思います
map/reduceが使えたら関数型?
C言語
Python
Lisp
動的/静的の壁
ML系
Haskell
日本人も漢字使ってるし中国語読めるでしょ?
関数型得意だしLisp書けるでしょ?
いやいや…
厳しい…
それくらい「関数型」アプローチは多様
Lispで「関数プログラミング」してますか?
Lisp族の中ですら言語(方言)ごとに文化が違う
みなさんはLispをご存じですか
出典: フリー百科事典『ウィキペディア(Wikipedia)』 関数型プログラミング より引用
C言語
Ruby(
Lisp(
(imaginary)
カッコだらけの構文 (S式)
WebAssembly テキスト形式 (.wat) でも採用されている
結構ひとによって印象が違う言語だと思う
そもそも関数型ってなんだ
「関数型」と呼んだのはジョンバッカス(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”より引用
(λ計算)
(Haskell)
(const)
(JavaScript)
λx.λy.x
x => y => x
(太古のJavaScript)
function (x) {
return function (y) {
return x;
};
};
(PHP)
fn($x) => fn($y) => $x
単純型なしλ計算はチューリング完全であることが知られている
関数と適用しかないが工夫して制御構造もデータ構造も作れる
こういう積み重ねで現代の関数型っぽい要素が整理された
レキシカルスコープとか不変性とかカリー化とか型推論とか代数的データ型とか遅延評価とかモナドとか関数合成とか参照透過とか
で、Lispはどういう関数型言語なの?
C言語
Python
Lisp
動的/静的の壁
ML系
Haskell
関数型的な主観だけで比較してしまうとLispとPHPは同等
2025-06-15 #fp_matsuri
関数型まつり 2025
LISPはラムダ計算の実装ではない
LISPと変数スコープ
FUNARG問題
スペシャル変数として定義することでダイナミックスコープも使える
(PHP)
fn($x) => fn($y) => $x
(Scheme)
(lambda (x)
(lambda (y)
x))
(Racket)
Lispでもラムダ計算できるが書きやすくはない
関数の純粋性を担保する仕組みが不足している
とはいえ関数プログラミングの道具は揃っている
その道具をどう使うかによってLispの文化がある
比較的シンプルな言語仕様と衛生的マクロ
関数型重視でJVMで動く。Rich Hickeyの哲学
GNU Emacsで動く。Emacsそのもの
機能的にはどのLispでも他のスタイルで書ける
「初めての人のためのLISP [増補改訂版]」 より引用竹内郁雄著, 2010年3月9日 初版第1刷発行, 翔泳社刊(電子書籍版を底本とする)
Lispは関数型言語ではないが能力と文化によって実現している
_人人人人人人人_> Lispは雑草 <‾Y^Y^Y^Y^Y^‾
広く普及したLispでありながらLispらしくないと敬遠された
Emacs Lispの弱点
Emacs
言語処理系にエディタ機能がついているべきか
初期化設定とEmacsで動かす機能の開発には境目がまったくない
Emacs Lispの弱点
かつては不出来な末っ子扱い現在は必死に追い上げている
Lispはマルチパラダイム
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一族の雑草のような生命力にご期待ください!
