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
sicp 3.2 評価の環境モデル
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
monmon
June 03, 2013
Technology
0
320
sicp 3.2 評価の環境モデル
せっかく環境モデルを絵で書いたことだしuploadするんだ
monmon
June 03, 2013
Tweet
Share
More Decks by monmon
See All by monmon
koba04 さんとワイワイJavaScript勉強会
monmon
0
120
YAPC::Asia Tokyo 2014 僕が担当した運営の話
monmon
0
1.3k
Other Decks in Technology
See All in Technology
Tebiki Engineering Team Deck
tebiki
0
24k
プロポーザルに込める段取り八分
shoheimitani
1
620
OWASP Top 10:2025 リリースと 少しの日本語化にまつわる裏話
okdt
PRO
3
840
SREが向き合う大規模リアーキテクチャ 〜信頼性とアジリティの両立〜
zepprix
0
470
Amazon S3 Vectorsを使って資格勉強用AIエージェントを構築してみた
usanchuu
4
450
1,000 にも届く AWS Organizations 組織のポリシー運用をちゃんとしたい、という話
kazzpapa3
0
110
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
750
AI駆動開発を事業のコアに置く
tasukuonizawa
1
340
ClickHouseはどのように大規模データを活用したAIエージェントを全社展開しているのか
mikimatsumoto
0
270
What happened to RubyGems and what can we learn?
mikemcquaid
0
310
AzureでのIaC - Bicep? Terraform? それ早く言ってよ会議
torumakabe
1
600
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
10k
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
100
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
64
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
98
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
Producing Creativity
orderedlist
PRO
348
40k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
130
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
230
YesSQL, Process and Tooling at Scale
rocio
174
15k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
The World Runs on Bad Software
bkeepers
PRO
72
12k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
57
50k
Transcript
sicp 3.2 評価の環境モデル p.138 - p.142まで くまがいのぶお(monmon) @lesamoureuses
手続き作用の環境モデルの二つの規則 1. 手続きオブジェクトを一組の引数に作用させる には、フレームを構成し、手続きの仮パラメタ を、その呼び出しの引数に束縛し、それから今 構成した新しい環境の文脈で、手続きの本体を 評価する。新しいフレームは外側の環境として、 作用させている手続きの環境部分を持つ。 2. 手続きを、与えられた環境に関してlambda式を
評価して作り出す。結果の手続きオブジェクトは lambda式の本文と手続きが作り出された時の 環境へのポインタである。
まずは手続き定義
例:大域環境で(define (square x) (* x x))を評価し て生じた環境構造
(define (square x) (* x x)) これはlambda式の構文シュガーで、 (define square (lambda
(x) (* x x))) と等価 (話を進める前の前提)手続き定義の構文 について
実際に規則を見ていく
手続き作用の環境モデルの二つの規則 1. 手続きオブジェクトを一組の引数に作用させる には、フレームを構成し、手続きの仮パラメタ を、その呼び出しの引数に束縛し、それから今 構成した新しい環境の文脈で、手続きの本体を 評価する。新しいフレームは外側の環境として、 作用させている手続きの環境部分を持つ。 2. 手続きを、与えられた環境に関してlambda式
を評価して作り出す。結果の手続きオブジェクト はlambda式の本文と手続きが作り出された時 の環境へのポインタである。
他の変数 大域環境
手続き作用の環境モデルの二つの規則 1. 手続きオブジェクトを一組の引数に作用させる には、フレームを構成し、手続きの仮パラメタ を、その呼び出しの引数に束縛し、それから今 構成した新しい環境の文脈で、手続きの本体を 評価する。新しいフレームは外側の環境として、 作用させている手続きの環境部分を持つ。 2. 手続きを、与えられた環境に関してlambda式
を評価して作り出す。結果の手続きオブジェクト はlambda式の本文と手続きが作り出された時 の環境へのポインタである。
(define (square x) (* x x)) これはlambda式の構文シュガーで、 (define square (lambda
(x) (* x x))) と等価
他の変数 大域環境
手続き作用の環境モデルの二つの規則 1. 手続きオブジェクトを一組の引数に作用させる には、フレームを構成し、手続きの仮パラメタ を、その呼び出しの引数に束縛し、それから今 構成した新しい環境の文脈で、手続きの本体を 評価する。新しいフレームは外側の環境として、 作用させている手続きの環境部分を持つ。 2. 手続きを、与えられた環境に関してlambda式
を評価して作り出す。結果の手続きオブジェクト はlambda式の本文と手続きが作り出された時 の環境へのポインタである。
他の変数 大域環境 パラメタ: x 本体: (* x x)
手続き作用の環境モデルの二つの規則 (の補足?) またdefineを使った記号の定義は、現在の環境フ レームで束縛を作り出し、表示された値をその記 号に割り当てる。
他の変数 square: 大域環境 パラメタ: x 本体: (* x x) (define
(square x) (* x x))
つぎに手続き作用
例:(square 5)を評価する時 に作り出された環境構造
手続き作用の環境モデルの二つの規則 1. 手続きオブジェクトを一組の引数に作用させる には、フレームを構成し、手続きの仮パラメタ を、その呼び出しの引数に束縛し、それから今 構成した新しい環境の文脈で、手続きの本体を 評価する。新しいフレームは外側の環境として、 作用させている手続きの環境部分を持つ。 2. 手続きを、与えられた環境に関してlambda式を
評価して作り出す。結果の手続きオブジェクトは lambda式の本文と手続きが作り出された時の 環境へのポインタである。
他の変数 square: 大域環境 パラメタ: x 本体: (* x x) (square
5) E1
手続き作用の環境モデルの二つの規則 1. 手続きオブジェクトを一組の引数に作用させる には、フレームを構成し、手続きの仮パラメタ を、その呼び出しの引数に束縛し、それから今 構成した新しい環境の文脈で、手続きの本体を 評価する。新しいフレームは外側の環境として、 作用させている手続きの環境部分を持つ。 2. 手続きを、与えられた環境に関してlambda式を
評価して作り出す。結果の手続きオブジェクトは lambda式の本文と手続きが作り出された時の 環境へのポインタである。
他の変数 square: 大域環境 パラメタ: x 本体: (* x x) (square
5) x: 5 E1
手続き作用の環境モデルの二つの規則 1. 手続きオブジェクトを一組の引数に作用させる には、フレームを構成し、手続きの仮パラメタ を、その呼び出しの引数に束縛し、それから今 構成した新しい環境の文脈で、手続きの本体を 評価する。新しいフレームは外側の環境として、 作用させている手続きの環境部分を持つ。 2. 手続きを、与えられた環境に関してlambda式を
評価して作り出す。結果の手続きオブジェクトは lambda式の本文と手続きが作り出された時の 環境へのポインタである。
他の変数 square: 大域環境 パラメタ: x 本体: (* x x) (square
5) x: 5 E1
手続き作用の環境モデルの二つの規則 1. 手続きオブジェクトを一組の引数に作用させる には、フレームを構成し、手続きの仮パラメタ を、その呼び出しの引数に束縛し、それから今 構成した新しい環境の文脈で、手続きの本体を 評価する。新しいフレームは外側の環境として、 作用させている手続きの環境部分を持つ。 2. 手続きを、与えられた環境に関してlambda式を
評価して作り出す。結果の手続きオブジェクトは lambda式の本文と手続きが作り出された時の 環境へのポインタである。
他の変数 square: 大域環境 パラメタ: x 本体: (* x x) (square
5) x: 5 E1 (* x x)
E1 で x の値は 5 だから 結果は (* 5 5)
つまり 25
(factorial 6) を再帰版 (define (factorial n) (if (= n 1)
1 (* n (factorial (- n 1))))) を使って評価する時、作り出される環境構造を示 せ q3.9
他の変数 factorial: 大域環境 パラメタ: n 本体: (if (= n 1)
1 (* n (factorial (- n 1))))
他の変数 factorial: 大域環境 パラメタ: n 本体: (if (= n 1)
1 (* n (factorial (- n 1)))) n: 6 E1 (if (= n 1) 1 (* n (factorial (- n 1)))) (factorial 6)
大域環境 n: 6 E1 (if (= n 1) 1 (*
n (factorial (- n 1)))) n: 5 E2 (if (= n 1) 1 (* n (factorial (- n 1))))
大域環境 n: 6 E1 (if (= n 1) 1 (*
n (factorial (- n 1)))) n: 5 E2 n: 4 E3 n: 3 E4 n: 2 E5 n: 1 E6
(factorial 6) を反復版 (define (factorial n) (fact-iter 1 1 n))
(define (fact-iter product counter max-count) (if (> counter max-count) product (fact-iter (* counter product) (+ counter 1) max-count))) を使って評価する時、作り出される環境構造を示せ q3.9
factorial: fact-iter: 大域環境 パラメタ: product, counter, max-count 本体: (if (>
counter max-count) product (fact-iter (* counter product) (+ counter 1) max-count)) パラメタ: n 本体: (fact-iter 1 1 n)
factorial: fact-iter: 大域環境 n: 6 E1 (fact-iter 1 1 n)
(factorial 6) product: 1 counter: 1 max-count: 6 E2 (if (> counter max-count) product (fact-iter (* counter product) (+ counter 1) max-count)) product: 1 counter: 2 max-count: 6 E3 (if (> counter max-count) product (fact-iter (* counter product) (+ counter 1) max-count))
factorial: fact-iter: 大域環境 (factorial 6) product: 1 counter: 1 max-count:
6 E2 product: 1 counter: 2 max-count: 6 E3 product: 2 counter: 3 max-count: 6 E4 product: 6 counter: 4 max-count: 6 E5 product: 24 counter: 5 max-count: 6 E6 product: 120 counter: 6 max-count: 6 E7 product: 720 counter: 7 max-count: 6 E8