休みと言いつつ
手が動く。
練習問題
p.74 のナニ。
gosh> (l) () gosh> (l 1) (1) gosh> (l 1 2 3) (1 2 3)
って出力される手続きを、との事。最初は
(define l (lambda (x . y) (cons x y)))
で OK? って思ってたら
gosh> (l)
がダメ。上記の書き方だと一つ以上引数が無いと gauche に叱られる。0 以上ってどうやるんだっけ、と言いつつ同じページの直上にヒント。
(define l (lambda x x))
で OK らしい。あるいは
(define (l . x) x)
でも OK な模様。うーん。図示とかしてあって分かりやすいなぁ、と言いつつ SICP なソレってどうなってたんだっけ、という事に思い至る。
むむ
なんとなくヤッてしまう any-pred と every-pred ですが ...
positive-integer? の定義とかを見てるとこれらが戻す手続きは引数一つとみれば、ガワって以下なカンジ ?
(define my-any-pred (lambda x (define my-any-pred-iter (lambda (y) )) (lambda (l) (my-any-pred-iter l))))
なんか微妙な風味ながらも続けてみかけて違う事に気づく。でリトライした結果が以下。
(define my-any-pred (lambda x (define my-any-pred-iter (lambda (x y) (cond ((null? x) #f) (((car x) y) #t) (else (my-any-pred-iter (cdr x) y))))) (lambda (l) (my-any-pred-iter x l))))
で、
gosh> (define xxx (my-any-pred zero? even?)) xxx gosh> (xxx 1.1) *** ERROR: integer required, but got 1.1
って叱られて解が微妙? って思ってたら even? に実数渡しちゃ駄目なのでした。書き方微妙ですが一応動いてる模様。
これ
大人しく読むのが微妙なのでニゲてる感満点ですね ...
しかもヒリ出た解が今一つ?