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
[資料] 静的束縛と動的束縛の違い
Search
zk-phi
July 24, 2019
Programming
0
510
[資料] 静的束縛と動的束縛の違い
図で理解するとわかりやすい説
zk-phi
July 24, 2019
Tweet
Share
More Decks by zk-phi
See All by zk-phi
[LT] 最近遊んだインディーゲーム
zk_phi
0
120
[LT] ちょっと賢く酒を飲む
zk_phi
0
180
[LT] 渋谷発おすすめ散歩ルート
zk_phi
0
160
[LT] ビールじゃない話
zk_phi
0
220
今週末できるお手軽ビアテイスティング
zk_phi
1
95
[LT] ビールが面白い話・2
zk_phi
1
300
[LT] 早押しクイズが楽しい話
zk_phi
0
150
[LT] ビールがおもしろい話
zk_phi
2
170
[LT] OpenSCAD でキーボード設計
zk_phi
0
550
Other Decks in Programming
See All in Programming
try! Swift Tokyo 初参加報告LT
hinakko2
0
190
Doctrine ORMでValue Objectを扱う方法4選 #phpstudy / 4 ways to handle Value Objects with Doctrine ORM
77web
4
110
From Spring Boot 2 to Spring Boot 3 with Java 22 and Jakarta EE
ivargrimstad
0
920
エンターテイメント業界で利用されるAWS
demuyan
0
200
StreamlitとTerraformでデータカタログを作った話
gussan0223
0
300
코틀린으로 멀티플랫폼 만들기
pangmoo
0
120
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.2k
ONE WEDGE_company_guide
1wedge_one
0
380
Front-end application development, Symfony-style(s)
dunglas
2
1.9k
データアナリストが行うDatabricksを活用したETLの自動化事例
shinoa
0
250
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
26
7.9k
雑に思考を整理する技術と効能
konifar
55
26k
Featured
See All Featured
What the flash - Photography Introduction
edds
64
11k
Designing with Data
zakiwarfel
95
4.8k
Building Adaptive Systems
keathley
30
1.8k
Side Projects
sachag
451
41k
A designer walks into a library…
pauljervisheath
199
23k
Docker and Python
trallard
33
2.7k
Product Roadmaps are Hard
iamctodd
43
9.7k
Why Our Code Smells
bkeepers
PRO
331
56k
Documentation Writing (for coders)
carmenintech
59
3.9k
4 Signs Your Business is Dying
shpigford
175
21k
Principles of Awesome APIs and How to Build Them.
keavy
120
16k
WebSockets: Embracing the real-time Web
robhawkes
59
7k
Transcript
静的束縛と動的束縛の話
静的束縛と動的束縛の話 ⼤前提 ・スコープはネスト (スタック) する ・原則として、内側のスコープが外側のスコープに優先する
(let ((a 1) (b 2)) (print a)) ;; => 1
a => 1 b => 2 静的束縛と動的束縛の話 ⼤前提 ・スコープはネスト (スタック) する ・原則として、内側のスコープが外側のスコープに優先する 最新の環境
(let ((a 1) (b 2)) (setq a 100) (print a))
;; => 100 a => 100 b => 2 静的束縛と動的束縛の話 ⼤前提 ・スコープはネスト (スタック) する ・原則として、内側のスコープが外側のスコープに優先する 最新の環境
(let ((a 1) (b 2)) (let ((a 2)) (print a)))
;; => 2 a => 1 b => 2 a => 2 静的束縛と動的束縛の話 ⼤前提 ・スコープはネスト (スタック) する ・原則として、内側のスコープが外側のスコープに優先する 最新の環境
(let ((a 1) (b 2)) (let ((a 2)) (setq a
200) (print a))) ;; => 200 a => 1 b => 2 a => 200 静的束縛と動的束縛の話 ⼤前提 ・スコープはネスト (スタック) する ・原則として、内側のスコープが外側のスコープに優先する 最新の環境
(let ((a 1) (b 2)) (let ((a 2)) (setq a
200) (print a)) (print a)) ;; => 1 a => 1 b => 2 a => 200 静的束縛と動的束縛の話 ⼤前提 ・スコープはネスト (スタック) する ・原則として、内側のスコープが外側のスコープに優先する 最新の環境
静的束縛と動的束縛の話 ⼤前提 ・スコープはネスト (スタック) する ・原則として、内側のスコープが外側のスコープに優先する ここまではわりと素直 ややこしいのは式がスコープをまたいで実⾏される時
(let ((a 1) (b 2)) (let ((f (λ () (print
a)))) (f))) ;; => 1 a => 1 b => 2 f => #<fn> 静的束縛と動的束縛の話 ⼤前提 ・スコープはネスト (スタック) する ・原則として、内側のスコープが外側のスコープに優先する 最新の環境
(let ((a 1) (b 2)) (let ((f (λ () (print
a)))) (let ((a 2)) (f)))) ;; => ?? a => 1 b => 2 f => #<fn> 静的束縛と動的束縛の話 ⼤前提 ・スコープはネスト (スタック) する ・原則として、内側のスコープが外側のスコープに優先する a => 2 当時の環境 最新の環境
静的束縛と動的束縛の話 ⼤前提 ・スコープはネスト (スタック) する ・原則として、内側のスコープが外側のスコープに優先する ここまではわりと素直 ややこしいのは式がスコープをまたいで実⾏される時 ・静的束縛は「式が書かれた時点での最新の環境」を参照する ・動的束縛はいつも「最新の環境」を参照する
(let ((a 1) (b 2)) (let ((f (λ () (print
a)))) (let ((a 2)) (f)))) ;; => 静的:1, 動的:2 a => 1 b => 2 f => #<fn> 静的束縛と動的束縛の話 ⼤前提 ・スコープはネスト (スタック) する ・原則として、内側のスコープが外側のスコープに優先する a => 2 当時の環境 最新の環境
静的束縛と動的束縛の話 ⼤前提 ・スコープはネスト (スタック) する ・原則として、内側のスコープが外側のスコープに優先する ここまではわりと素直 ややこしいのは式がスコープをまたいで実⾏される時 ・静的束縛は「式が書かれた時点での最新の環境」を参照する ・動的束縛はいつも「最新の環境」を参照する
代⼊がどの環境を書き換えるかも同様
(let ((a 1) (b 2)) (let ((f! (λ () (setq
a 100)))) (let ((a 2)) (f!))) (print a)) ;; => 静的:100, 動的:1 a => 1 100 b => 2 f => #<fn> 静的束縛と動的束縛の話 ⼤前提 ・スコープはネスト (スタック) する ・原則として、内側のスコープが外側のスコープに優先する 最新の環境 a => 100 2 当時の環境