(define x 1)
이건 C로 따지면
int x=1;
이라 할 수 있을 것 같은데,
(define (square x)
(* x x))
와 같이
물론 이라 할 수도 있고
(define x 1)을
int x() { return 1; }
에 가깝다고 해석할 여지도 있긴 하지만 그런 경우 lambda를 쓰는 게 더 정확한 거 아닌지.
책에서, substitution model에서 environment model로 evaluation model을 바꿀 때가 되어서야 (필요에 의해서) formal parameter가 포함된 define은 syntactic sugar일뿐이라는 것을 밝히는데, 처음부터 그런 syntactic sugar를 자제했으면 앞부분에 나오는 make-xxx류의 이해가 더 쉬웠을 것이다.
예를 들어
(define make-withdraw
(lambda (balance)
(lambda (amount)
(set! balance (- balance amount))
balance)))
이렇게 쓰는 것이 lambda가 두 번 등장하기 때문에 아래처럼 쓰는 것보다 의도가 더 명확해진다.
(define (make-withdraw balance)
(lambda (amount)
(set! balance (- balance amount))
balance))
프로시저, 묶인다(binding), referentially transparent 등 좋은 개념들이 많이 나오지만 스크립트 언어를 자작하지 않는 한 대부분의 사람에게 읽고자 하는 의욕이 안 생기게 하는 책일 것 같다. ㅋ
지금 알고 있는 걸 그때도 알았더라면...
No comments:
Post a Comment