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))))))
続きを読む