Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Lispの紹介 〜 令和最新版
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
t-sin
January 25, 2024
Programming
780
0
Share
Lispの紹介 〜 令和最新版
Shibuya.lisp lispmeetup #113
で発表したときのスライドです。
t-sin
January 25, 2024
More Decks by t-sin
See All by t-sin
Carp言語さわってみた 〜鯉を取り戻せ編〜
tsin45
0
1.3k
Common Lisp製のゲームエンジンTrialについてすこし
tsin45
0
1.4k
Common Lispでのゲームボーイエミュレータ実装進捗報告 vol.1
tsin45
0
890
Other Decks in Programming
See All in Programming
Claude CodeでETLジョブ実行テストを自動化してみた
yoshikikasama
0
830
YJITとZJITにはイカなる違いがあるのか?
nakiym
0
250
How We Benchmarked Quarkus: Patterns and anti-patterns
hollycummins
1
160
〜バイブコーディングを超えて〜 チームで実験し続けたAI駆動開発
tigertora7571
0
160
[RubyKaigi 2026] Require Hooks
palkan
1
230
属人化しないコード品質の作り方_2026.04.07.pdf
muraaano
0
240
Spec-driven Development: How AI Changes Everything (And Nothing)
simas
PRO
0
240
Vibe하게 만드는 Flutter GenUI App With ADK , 박제창, BWAI Incheon 2026
itsmedreamwalker
0
550
年間50登壇、単著出版、雑誌寄稿、Podcast出演、YouTube、CM、カンファレンス主催……全部やってみたので面白さ等を比較してみよう / I’ve tried them all, so let’s compare how interesting they are.
nrslib
4
800
2026_04_15_量子計算をパズルとして解く
hideakitakechi
0
110
JAWS-UG横浜 #100 祝・第100回スペシャルAWS は VPC レスの時代へ
maroon1st
0
180
Server-Side Kotlin LT大会 vol.18 [Kotlin-lspの最新情報と Neovimのlsp設定例]
yasunori0418
1
190
Featured
See All Featured
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
10k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
320
Speed Design
sergeychernyshev
33
1.6k
The Cult of Friendly URLs
andyhume
79
6.8k
From π to Pie charts
rasagy
0
170
Believing is Seeing
oripsolob
1
120
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
340
How STYLIGHT went responsive
nonsquared
100
6.1k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
520
How to make the Groovebox
asonas
2
2.1k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
770
Become a Pro
speakerdeck
PRO
31
5.9k
Transcript
Lispの紹介 〜 令和最新版 @t-sin 2024-01-25 Shibuya.lisp lispmeetup #113
背景 • lispmeetupのオフライン開催が4年ぶり • Lispあまりよく知らない方もいそう • なのでLispを紹介します
Lispってどんな言語? • JSやPythonやRubyに近い手ざわり • Lispっていっぱいある – Lispは言語族の名前 • 自己拡張性が高い –
とても動的な処理系であることがおおい
LispとJSやRubyの似てる点 • 高階関数やラムダ式 • 静的型システムはない (たいていは) • RPELがある
Lispと似てる点: 高階関数 • JavaScriptによる例 (RosettaCodeより) • https://rosettacode.org/wiki/Function_composition#ES6 var compose =
(f, g) => x => f(g(x)); var id = compose(Math.sin, Math.asin); console.log(id(0.5)); // 0.5
Lispと似てる点: 高階関数 • Common Lispによる例 (RosettaCodeより) https://rosettacode.org/wiki/Function_composition#Com mon_Lisp > (defun
compose (f g) (lambda (x) (funcall f (funcall g x)))) COMPOSE > (let ((sin-asin (compose #'sin #'asin))) (funcall sin-asin 0.5)) 0.5
LispとJSやRubyの似てない点 • S式と呼ばれる構文 • Lispのマクロ – 構文木を構文木へ変換する – テキスト置換ではない –
でも静的型はない • (一部のLispは) REPLの機能がつよい
Lispはいっぱいある • たくさんの処理系がある – Scheme, Common Lisp, Emacs Lisp, Arc,
Clojure, Carp, … • その理由はおそらく… – Schemeが言語機能の実験場だった時期がある – 比較的単純なのでアイデアをすぐに実現できる – LisperがLisp大好きすぎる (?)
Lispの自己拡張性 • 関数を定義すると語彙が増える – 関数呼び出し構文はビルトインでもユーザ定義でも同じ – →言語を拡張している • ほかにも –
Lispのマクロ – 拡張可能なパーサ (Common Lisp) – 実行時情報をREPLで変更 (Common Lisp, Clojure) – 実行時にクラス定義の変更 (Common Lisp)
Lispの自己拡張性 • LISP 1.5のころから自己拡張性高かった – 基本的な要素がら複雑な機能を立ち上げていく • 川合史朗さんの『LISP 1.5の風景』に記載あり –
ラムダノート社『n月刊ラムダノート Vol.1, No.2 (2019)』所収
Lispのよくある誤解集 • 関数型言語である • マクロを書きまくる • インタプリタだから遅い
Lispの誤解集: 関数型言語である • 手続き型言語です • 高階関数とかあるけど再代入とか破壊的変更よくや る – オブジェクト指向だとなおさらやる •
Clojureは関数型言語っぽさを推しているけど、一 部破壊的変更ができるので全体としては関数型では ない
Lispの誤解集: マクロを書きまくる • そんなに書かないです • 複雑なバグを生みうるやつ – マクロのマクロのマクロの... – メタプログラミングあるある
• 関数ですむなら関数を書く • DSLを作るときには大活躍
Lispの誤解集: インタプリタで遅い • コンパイラを持ってること多し – 最近はコンパイラとインタプリタの境は曖昧 • インタプリタだけどVM方式だったりJITもってたり • Rubyに最近JITが入りましたよね?
• ネイティブコードコンパイラのある処理系は速い – SBCL (Common Lisp)、Chez Scheme (Scheme, R5RS) – ClojureはJVM言語なのでJVMに律速される
で、Lispって何ができるの? • わりと何でもできる – Webサービス、ゲーム、OS、ツール、... • 古い言語なのでいろんなソフトウェアがある • もしかしたら身近なところに潜んでいるかも …?
Lispの事例集: スクリプト言語 1 • GNU Emacs (Emacs Lisp) – エディタの設定とスクリプティング
• AutoCAD (AutoLisp) – CADのスクリプティング – CADってコマンド操作が基本っぽい
Lispの事例集: スクリプト言語 2 • Audacity (Nyquist) – Audacityは音声波形編集ソフト – Nyquistは音声信号生成もできる
• ALSA (alisp) – ALSAはLinuxのオーディオ抽象化レイヤー – 設定言語が実はLisp • `find / | grep alisp`してみると…?
Lispの事例集: Webサービス • ハチペイのバックエンド (Common Lisp) – 渋谷区の決済アプリ – https://www.hachi-pay.tokyo/
– 株式会社ポケットチェンジ • 広告媒体アカウント管理システム (Clojure) – https://tech-magazine.opt.ne.jp/entry/2021/01/13/124551 – 株式会社オプト • Practical Scheme (Gauche Scheme) – https://practical-scheme.net/ – 川合史朗さん
Lispの事例集: ゲーム • クラッシュ・バンディクー (1と2) – GOAL (Game Oriented Assembly
Lisp) というLisp • Kandria (Common Lisp) – メトロイドヴァニア系アクション – https://store.steampowered.com/app/1261430/Kandria/ • Steamで買って遊べます!!!
Lispの事例集: ツール (1) • pgloader (Common Lisp) – PostgreSQLのdump/loadツール –
https://pgloader.io • Maxima (Common Lisp) – 数式処理システム (Mathematicaみたいなやつ) – https://maxima.sourceforge.io/
Lispの事例集: ツール (2) • Lem (Common Lisp) – テキストエディタ •
Roswell (Common Lisp + C) – Common Lispの処理系マネージャ • Senn (Common Lisp) – 日本語入力メソッド (IME) – https://github.com/mhkoji/Senn
Lispの事例集: 作曲環境 • Opusmodus (Common Lisp) – https://www.opusmodus.com/ • Overtone
(Clojure) – https://overtone.github.io • Extempore (Scheme) – https://github.com/digego/extempore
Lispの事例集: そのほか 1 • Nyxt (Common Lisp) – キーボード指向のウェブブラウザ –
https://nyxt.atlas.engineer/ • Mezzano (Common Lisp) – オペレーティングシステム – https://github.com/froggey/Mezzano
まとめ • Lispはけっこういろいろできる • Lispはカッコいい • みんなもLispやろうぜ!!!