ããã°ã©ãã³ã°åºç€æŠå¿µãŸãšã
åèšèªã®æœè±¡ãšããŠã®åºç€æŠå¿µããŸãšããŠãŠãã.
ð»ããã°ã©ã
èšç®æ©ç§åŠã«ãããããã°ã©ã . ãã©ãã€ã ã«ãã£ãŠå®çŸ©ãããšãªã.
- åœä»€åãã©ãã€ã
- ã³ã³ãã¥ãŒã¿ãè¡ãã¹ãåœä»€ã®å(a sequence of executing instruction).
- ãªããžã§ã¯ãæååãã©ãã€ã
- ãªããžã§ã¯ããšã¡ãã»ãŒãžã³ã°
- 颿°åãã©ãã€ã
- 颿°ãã®ãã®
ref. ããã°ã©ã (ã³ã³ãã¥ãŒã¿) - Wikipedia
SICP ãã
ããã»ã¹ã¯èšç®æ©ã®ãªãã«æœãæœè±¡çãªååš.
ããã»ã¹ã¯ããäžã€ã®æœè±¡çãªååš, ããŒã¿ãæäœãã.
ããã»ã¹ã®é²è¡ã¯, èŠåã®ãã¿ãŒã³, ããã°ã©ã ã«ãããã.
ããã°ã©ã ã¯äºã€ã®èŠçŽ ããã€.
- æç¶ã: ããŒã¿ã®åŠçæ¹æ³(èœåç)
- ããŒã¿: åŠçããããã®(ååç)
ðåŒ(Expression)
èšç®æ©ã®è§£éç³»ã«æž¡ãããåã®è¡šçŸ. è§£éç³»ã«è©äŸ¡ããããš, åŒã¯ããã»ã¹ã«ãªã.
ref: åŒ (ããã°ã©ãã³ã°) - Wikipedia
èšèªã«ãã£ãŠå®ããããåªå é äœãçµã³ã€ãã®èŠå®ã«åã£ãŠè©äŸ¡ãããå€, 倿°, æŒç®å, 颿°ã®çµã¿åãã.
ðããã»ã¹(èšç®æ©ç§åŠ)
ããã»ã¹ã¯èšç®æ©ã®ãªãã«æœãæœè±¡çãªååš. ããã»ã¹ã¯ããäžã€ã®æœè±¡çãªååš, ããŒã¿ãæäœãã. ããã»ã¹ã®é²è¡ã¯, èŠåã®ãã¿ãŒã³, ããã°ã©ã ã«ãããã.
ããã°ã©ã ã«å¿ èŠãªè³æºã®ããš. ããã°ã©ã èªäœ, ããŒã¿, ã¹ã¿ãã¯, ã«ãŠã³ã¿, ã¹ã¿ãã¯ãã€ã³ã¿, ã¬ãžã¹ã¿, ã¡ã¢ãªãªã©.
3 ã€ã®ç¶æ (Run, Blocked, Ready) ãæã€. è€æ°ã®ããã»ã¹ãä»®æ³çã«äžŠåã«å®è¡ãããã®ãããã»ããµ.
ðãªãã©ã«(literal)
å³å€ (è±: Immediate) ãšããã, ãœãŒã¹ã³ãŒãå ã«å€ãçŽæ¥è¡šèšãããã®.
éçã«æ§æè§£æãå¯èœãªããšãå€ã. 倿°ã®å¯ŸçŸ©èª. 倿Žãããªãå€.
ð倿°(valuables)
倿°ã®æ§æèŠçŽ ã¯ä»¥äžã® 2 ã€.
- èå¥å (Identifier)
- æ ŒçŽåå®äœ (Store entity)
x = 1 ãšããããšã¯ã©ãããããšãã説æããæŠå¿µ.
æ°åŠçãªååé¢ä¿ã§ x = 1 ã説æããããšããŠãã. { X -> x1=1 }ã¿ãããªæã. x1 ãã¡ã¢ãªäžã®å®éã® (æçžããã) å€ã§, X ããããæã瀺ãèå¥å.
ðIdentifiers
èå¥å (Identifier)
ðStore Entity
æ ŒçŽåå®äœ (Store entity)
ðEnvironments
èå¥åãšå€æ°ã®ååé¢ä¿ãç°å¢ãšãã.
- a collection of (symbol, value) pair.
- environment has a parent environment, possible to have multiple children.
- a function + an environment = a closure
Global Environments
ã©ãããã§ãåç §ã§ãã environments.
top environment, ãã¹ãŠã®èŠªãšãªã environments.
ðå¯å€æ§(mutable)
ðäžå€æ§(immutable)ã®å¯ŸçŸ©èª. æéãšãšãã«å€åããæ§è³ª.
ðäžå€æ§(immutable)
äžå€æ§. äžåºŠå€ãã»ãã(æçž)ãããããšãã倿Žã§ããªããšããããš.
ç Žå£ç倿Žãèµ·ããªããšããã. ããŒã¿ãå€ããå¿é ãäžèŠ.
ðæ°žç¶æ§(persistent)
æ°žç¶æ§. ããŒã¿ã倿Žããéã«å€æŽåã®ããŒãžã§ã³ãåžžã«ä¿æããããŒã¿æ§é ã®æ§è³ª. æ°žç¶ããŒã¿æ§é ãšèš³ããã.
ref: æ°žç¶ããŒã¿æ§é - Wikipedia
- note: deep copy vs shallow copy
- Clojure is immutable and persistent
Single-Assignment Store
åäžä»£å ¥æ ŒçŽå.
äžåºŠäžã€ã®å€ãæçžããã倿Žã§ããªã倿°ã®éå. 宿°.
颿°åããã°ã©ãã³ã°ã§ã¯, ãã®å€æ°ãåœããå.
ð倿°æçž
bindings, æçž.
ðUnbound Value
ã¡ã¢ãªäžã«å€ãååšããªãã, 宣èšããã倿°.
æ¥æ¬èªã¯äœã ãã, æªå®çŸ©å€æ°?
- C/C++ ã§ã¯, ãŽã (äžå®ããŒã¿) ãæ ŒçŽãããŠãã.
- Java 㯠0 åæåãããŠãã.
- Prolog ã¯å®è¡æã«ãšã©ãŒçµäºãã.
- Oz ã¯å€ã bind ããããŸã§ãŸã¡ãããã.
ðããŒã¿ãããŒå€æ°
DataFlow Value.
ðUnbound Value ãæçžããããŸã§ããã°ã©ã ã®å®è¡ãåŸ ã¡åããããããªå®£èšç倿°.
æçžããããšãã®å®è¡ã ããŒã¿ãããŒå®è¡(Dataflow Execution)ãšãã.
ããã¹ã¬ãããããŒã¿ãããŒå€æ°ãå©çšããããšãããšã, ãã®å€æ°ã«å€ãæçžãããŠããªãå Žåã¯, å¥ã®ã¹ã¬ãããæçžãããŸã§åŸ ã¡åãããè¡ã.
ãã®ããŒã¿ãããŒå€æ°ã«ãã£ãŠ, No Race Conditions (éç«¶åç¶æ ) ãå®çŸãããšäžŠè¡ããã°ã©ãã³ã°ã¯ãšãŠãã·ã³ãã«ã«ãªã.
- refs.
ðã¹ã³ãŒã(Scope)
Valiable ã®æå¹ç¯å².
Scoping Rules - ã¹ã³ãŒãã®ç¯å²
ðéçã¹ã³ãŒã(Lexical Scope)
refs: éçã¹ã³ãŒã - Wikipedia
倿°ã¯ãããã¯ã®å åŽã®ã¿æå¹.
Lexical Scope, Static Scope ãšã. åå¥çã¹ã³ãŒããšããã.
free valuables are searched for in the environment in which the funcition was defined.
ãããã¯æ§é (block Structure)
æç¶ãã®ä»®åŒæ°ã¯å±æçã§ãã. 颿°ã®å®çŸ©ã¯å±æçã§ãªã.
æç¶ãããã©ãã¯ããã¯ã¹ã«ããããã«ã¯, å©çšè ã«å¿ èŠã®ãªã颿°ã¯é èœããå¿ èŠããã.
å®çŸ©ã®å ¥ãåã ãããã¯æ§é ãšãã. ãããã¯æ§é ã®äžã§å®çŸ©ããã颿°ã¯å±æçã§ãã.
ã§ããã ããããã¯ãå©çšããããšã§å·šå€§åé¡ã, æ±ããéšåã«åå²ã§ãã.
SICP p17 ãã.
R example
Scope ã®å€ãžã®æ»ãå€ã¯, Scope å éšã®é¢æ°ã®ã³ããŒã§ãã.
# from R Programming coursera.
make.power <- function (n) {
pow <- function (x) { x^n }
pow
}
cube <- make.power (3)
square <- make.power (2)ðåçã¹ã³ãŒã(Dynamic Scope)
ðEmacs Lisp 㯠ãã€ãããã¯ã¹ã³ãŒããæ¡çšããŠãã.
Emacs Lisp ã¯, ã¢ããªã±ãŒã·ã§ã³ã»ããã°ã©ãã³ã°ã§äœ¿ãããæ¹èšçŸ€ã§ãã Scheme ã Common Lisp ãšã¯æ ¹æ¬çã«ç°ãªã. 倧ããªéãã® 1 ã€ã¯, ããã©ã«ãã§åå¥çã¹ã³ãŒãã§ã¯ãªãåçã¹ã³ãŒãã䜿ãããšã§ãã. ã€ãŸã, åŒåºã颿°ã®å±æå€æ°ã¯, ãã€ã³ã¿ãåç §ãæž¡ããªããšã, åŒã³åºããã颿°ããåç §ã§ãã.
- åçã¹ã³ãŒã - Wikipedia
- Emacs Lisp - Wikipedia
- ã¬ãã·ã«ã«ã¹ã³ãŒããšãã€ãããã¯ã¹ã³ãŒã | ããã«å¿ããè³ã¿ãã®ããã®ã¡ã¢
ðç¶æ (èšç®æ©ç§åŠ)
State (ç¶æ ) ãšã¯, å¿ èŠãšãããèšç®ã®éäžçµæãå«ã, å€ã®æç³»å.
sequence of values calculated progressively, which contains the intermediate results of a computation.
ç¶æ ã®å°å ¥ã«ãã£ãŠ, ããã°ã©ã ã«æéã®æŠå¿µãäžãã.
ð宣èšçç¶æ (Implicate State)
æé»çç¶æ . 宣èšçç¶æ . Stateless, declarative Stateãšããã.
-
颿°ã®å®è¡çµæãå€ããã€
-
åãå ¥åã«ã¯å¿ ãåãåºåãè¿ã.
ðæç€ºçç¶æ (Explicite State)
æç€ºçç¶æ , Explicite State. Stateful.
- çåæéã 2 床以äžã®æç¶çåŒã³åºãã«æž¡ããããªäžã€ã®ç¶æ .
- 颿°ã®å®è¡ã®äžã«å€ããã€.
- æç¶ãã®åŒæ°ã«çŸããªããã®.
åæ§ãªããšã颿°åãã©ãã€ã ã§å®çŸããããã«ã¯, ä»®åŒæ°ã«ç¶æ ãæããªããšãããªã.
Cell
Explicite State (æç€ºçç¶æ ) ã衚ãåºæ¬å. äºã€ã®æ§æèŠçŽ ãããªã.
- ååå€ (Vaiue)
- åäžä»£å ¥æ ŒçŽåãžã®åç § (Identifier)
declare
fun {Reverse L}
% 空ãªã¹ãã® cell ãçæ
Rs = {NewCell nil}
in
% ãªã¹ãã®åèŠçŽ ãåãåºããŠå
éš Cell ã«çµå
for X in L do
Rs := X|@Rs
end
% å
éšã»ã«ããªã¿ãŒã³ãã.
% Ruby ã£ãœã!
@Rs
end
{Show {Reverse [1 2 3 4]}}ðã¢ãžã¥ãŒã«æ§
ããéšåã倿ŽããŠãå¥ã®éšåã«ã¯å€æŽãå ãããªããšã, ãããã¢ãžã¥ãŒã«æ§ãšãã.
Function Paradium ã§ã¯ã§ããªã. State ãããã°ã§ãã.
ðåäžå®äœ(identity)
æéãçµéããŠå€ãå€åããŠããããæã瀺ããã®ã¯å€ãããªãåç §.
ðè©äŸ¡æŠç¥(Evaluation Strategy)
è©äŸ¡æŠç¥. Substitutonal Rule (ä»£å ¥èŠå) ãšã.
ããã°ã©ãã³ã°èšèªãã©ã ãèšç®ã®ãããªåŒããæãèšç®æš¡åã«ãããŠ, åŠäœãªãæé ã§, è©äŸ¡ããªãã¡åŒããå€ãåŸãã, ãšãã (é垞決å®çãª) èŠå矀.
- Call-by-Name (åååŒã³)
- Call-by-Value (å€åŒã³)
- Call-by-Ref (åç §åŒã³)
ðé å»¶è©äŸ¡(Lazy Evaluation)
å€ãå¿ èŠã«ãªããŸã§åŒã®è©äŸ¡ãé ãããè©äŸ¡æŠç¥. å¿ èŠåŒã³(call-by-need)ãšããã.
å®éã®è©äŸ¡ãè¡ãããŠããªãç¶æ 㯠ãããã¹(promise)ããµã³ã¯(thunk)ãšãã匷å¶(force)ããããšã§å€ãèšç®ããã(ãã®ãžãã¯åèšèªã«ãã£ãŠåç§°ãç°ãªã).
é å»¶è©äŸ¡ã®ã¡ãªãã㯠èšç®éã®æé©å ã§ãã.
- èšç®ã³ã¹ããé«äŸ¡ãªãšãã¯äœåãªèšç®ãããªããŠæžã.
- ã¡ã¢ãªã«ä¹ããªã倧ããªããŒã¿ãæ±ãã.
- I/Oãæ¬åœã«å¿ èŠã«ãªããšããŸã§é ããã.
èšèªã§é å»¶è©äŸ¡ããµããŒããããŠããŠéçºè ãç¹å¥ãªæèãããããšãªãé å»¶è©äŸ¡ãã§ãããªãã°ã»ãšãã©ã®å Žå䜿ã£ãã»ãããã(ãšClojureçéã§ãã£ãŠã).
- refs.
Eager Evaluatin: å è¡è©äŸ¡
Lazy Evaluation: é å»¶è©äŸ¡ ã®å¯ŸçŸ©èª.
æ®éã®ããšãªã®ã§ããŸã話é¡ã«äžããããšããªã.
Haskell
2 ã€ã®è©äŸ¡æ¹æ³ãããã©ã¡ããéžæããŠãæåŸã®çµæãå€ãããªããšããæ§è³ªããã.
- InnterMost Reduction: æå
ç°¡çŽ
- å åŽããè©äŸ¡ãã.
- è©äŸ¡å¯Ÿè±¡ãè€æ°ããå Žåã¯, å·Šããè©äŸ¡ãã.
- OuterMost Reduction: æå€ç°¡çŽ
- å€åŽããè©äŸ¡ãã.
- è©äŸ¡å¯Ÿè±¡ãè€æ°ããå Žåã¯, å·Šããè©äŸ¡ãã.
SICP ãã
- æ£èŠé åº (normal-order evaluation)
- æŒç®åãšéæŒç®åãè©äŸ¡.
- æŒç®åè©äŸ¡çµæã®æç¶ããéæŒç®åè©äŸ¡çµæã®åŒæ°ã«äœçšããã.
- äœçšçŽ çé åº (applicative-order evaluation)
- ãã®å€ãå¿ èŠã«ãªããŸã§, éæŒç®åãè©äŸ¡ããªã. é å»¶è©äŸ¡??
ðç³è¡£æ§æ(SyntaxSuger)
ããã°ã©ãã³ã°èšèªã«ãããŠ, èªã¿æžãã®ããããã®ããã«å°å ¥ãããæ§æã§ãã, æ¢ã«å®çŸ©ãããŠããä»ã®æ§æã® (人éã«ãšã£ãŠããçè§£ãããã)æžæããšããŠå®çŸ©ããããã®ã®ããš.
ð颿°(èšç®æ©ç§åŠ)
颿°(Function). ãã©ãã€ã ã«ãã£ãŠåŒã³æ¹ãå®çŸ©ãç°ãªã.
- æç¶ãå: ðããã·ãŒãžã£(procedure)
- ãªããžã§ã¯ãæå: ðã¡ãœãã(methods)
- 颿°å: ð颿°(Function)
倧äºãªããšã¯, äžè¬çã«ã¯å ¥åã«å¯ŸããŠåãåºåãåºããšãããã®ã颿°ãšãã°ããŠããã, ããã¯æ°åŠãð颿°åããã°ã©ãã³ã°ãšãããã©ãã€ã ã«ãããðã©ã ãæœè±¡ãèšã£ãŠããã, ããšãã°æç¶ãåã®ãã©ãã€ã ã§ã¯é¢æ°ãšã¯ã«ãŒãã³ã§ãã, ãã©ãã€ã ã«ãã£ãŠé¢æ°ã®æå³åããããšãªãããš.
ðªååã¯æ°åŠ(éåè«).
CTMCP ã§ã®å®çŸ©
Procedure is a procedure value with a contextual environment.
Since procedures (and functions) are values, we can pass them as inputs to other functions and return them as outputs.
SICPã§ã®å®çŸ©
- Processs (ããã»ã¹)
- èšç®æ©ã®ãªãã«æœãæœè±¡çãªååš.
- Procedure (æç¶ãã»ããã·ãŒãžã£)
- ããŒã¿ã®åŠçæ¹æ³.
ããŒã¿ã«ããããŠç¹°ãè¿ãã§åŠçããããªãæ¹æ³ã«ã¯, ååž°çåŠçãšå埩çåŠçããã.
Recursive: ååž°ç
èšç®ãå®è¡ããããã«ã¯, 以åã®èšç®çµæãèŠããŠããå¿ èŠããã. èšç®å¹çãšç©ºéå¹ç㯠x ã®å€§ããã«æ¯äŸãã.
ããã, ç·åœ¢ååž°ããã»ã¹ãšãã.
;; applicative-order evaluation
;; linier recursion
(defun plus (x y)
(if (= x 0)
y
(1+ (+ (1- x) y))))Iterative: å埩ç
èšç®å¹çã¯, å ¥åå€ã«æ¯äŸãã. 空éå¹çã¯, äžå®.
ãããç·åœ¢å埩ããã»ã¹ãšãã.
;; normal-order evaluation
;; linier iteration
(defun plus (x y)
(if (= x 0)
y
(+ (1- x) (1+ y))))以äžãããªã.
- ç¶æ ãäžå®åæ°ã®ç¶æ 倿°
- ç¶æ ãç§»ã£ããšãã«ç¶æ 倿°ãã©ãå€åããããã®èŠå
- ããã»ã¹ãçµäºãããæ¡ä»¶.
颿°ã®åŒæ°
ããããçš®é¡ãããååãã€ããããŠãã.
ä»®åŒæ°(parameters)
颿°å®çŸ©æã®åŒæ°.
å®åŒæ°(arguments)
颿°åŒã³åºãæã®å®éã®å€.
äœçœ®åŒæ°
ããã©ã«ãåŒæ°
ããŒã¯ãŒãåŒæ°
äœçœ®åŒæ°ã¯å·Šãã䞊ãã é ã«åŒæ°ãšããŠè§£éãããã, ããŒã¯ãŒãåŒæ°ãšã¯ä»®åŒæ°ã«ããŒã¯ãŒããã€ããããšã§å·Šããã®ãªãã³é ã§ãªããŠçŽæ¥ããŒã¯ãŒãã«å¯ŸããŠå€ãbindã§ããããªæ¹æ³.
ðå¯å€é·åŒæ°(Variadic Variable)
å¯å€é·åŒæ°. Variadic=å¯å€é·.Variadic Variable
ãªãã·ã§ã³åŒæ°ãšã.