Exercise 2.11
ちょっとだけ。lambda-calculus-subst 手続きですが例えば var-exp の部分が以下になってて
(var-exp (id) (if (eqv? id subst-id) subst-exp exp)
subst-exp に単純に置きかえるのではなくて
(if (occurs-free? id exp) subst-exp (fresh-id exp id))
みたいにすれば良いのかな。実装は別途で。
Exercise 2.10
fresh-id という手続きについて云々。定義が以下らしい。
(define fresh-id (lambda (exp s) (let ((syms (all-ids exp))) (letrec ((loop (lambda (n) (let ((sym (string->symbol (string-append s (number->string n))))) (if (memv sym syms) (loop (+ n 1) sym)))))) (loop 0)))))
ふむ。実行例も出てますが略。all-ids を定義しなさい、という事らしい。
続きを読むEffectiveAndroid
3.0.0 を入手してナナメに読んだのですがやっぱとりあえず
- Volley 試してみないと
- Location API も
- あと Gradle
ってことで明日時間確保できたら云々してみる予定です。ログはエントリ投入の方向。
Exercise 2.9
(a b c) を parse すると以下。
gosh> (parse-expression '(a b c)) (app-exp (free-info a) (free-info b))
あるいは (lambda) を parse すると以下。
gosh> (parse-expression '(lambda)) *** ERROR: pair required, but got ()
どうすりゃ良いのかな。51p な parse-expression だと datum が pair の場合は lambda と app 限定って考えると簡単っちゃ簡単なのかどうか。
続きを読むExercise 2.8
いちおう試験にはパス。問題に compare this version to the original solution とあるので確認してみることに。
続きを読むEoPL 読んでた記録の確認とその記録 (8)
Ex.2.8 です。ちょっとカン違いしてたのですが、以下は #t なんですね。
> (occurs-bound? 'x '(lambda (y) y))
occurs-bound? は以下なカンジ。
(define occurs-bound? (lambda (var exp) (cases lexical-address exp (lit-exp (datum) #f) (lex-info (id depth position) #t) (free-info (id) #f) (if-exp (test-exp true-exp false-exp) (or (occurs-bound? var test-exp) (occurs-bound? var true-exp) (occurs-bound? var false-exp))) (lambda-exp (id body) (or (occurs-bound? var body) (and (eqv? var id) (occurs-free? var body)))) (app-exp (rator rand) (or (occurs-bound? var rator) (occurs-bound? var rand))))))続きを読む