SICP ex.4.21
気分転換にやってみたけど、あまり面白くなかった。
# ex.4.21.rb =begin a. ((lambda (n) ((lambda (fact) (fact fact n)) (lambda (ft k) (if (= k 1) 1 (* k (ft ft (- k 1))))))) 10) =end lambda {|n| lambda {|fact| fact.call(fact, n) }.call lambda {|ft, k| if k == 1 1 else k * ft.call(ft, k - 1) end } }.call 10 =begin b. (define (f x) (define (even? n) (if (= n 0) #t (odd? (- n 1)))) (define (odd? n) (if (= n 0) #f (even? (- n 1)))) (even? x)) (define (f x) ((lambda (even? odd?) (even? even? odd? x)) (lambda (ev? od? n) (if (= n 0) #t (od? ev? od? (- n 1)))) (lambda (ev? od? n) (if (= n 0) #f (ev? ev? od? (- n 1)))) =end f = lambda {|x| lambda {|evenp, oddp| evenp.call(evenp, oddp, x) }.call lambda {|evp, odp, n| if n == 0 true else odp.call evp, odp, n - 1 end }, lambda {|evp, odp, n| if n == 0 false else evp.call evp, odp, n - 1 end } }
修正
qではなくpだった。predicate