EoPL reading (15) 1.2.4 Exercises

sort がいいカンジだったので調子に乗って次もトライ。linux kernel 方面スルーだな、と自覚しつつも止まらない。

Exercise 1.18-1

とりあえず以下な試験を作って

(use gauche.test)

(add-load-path ".")
(load "compose")

(test-start "compose")
(test-section "compose")
(test* "((compose car cdr) '(a b c d)) should return b"
       'b
       ((compose car cdr) '(a b c d)))
(test-end)

空っぽの手続きを作って試験してみたら以下。

$ make
Testing compose ...                                              failed.
discrepancies found.  Errors are:
test ((compose car cdr) '(a b c d)) should return b: expects b => got #<error "invalid application: (#<undef> (a b c d))">
$

手続き戻すからなぁ、と。仕方無いので以下な定義にしといて

(define (compose p1 p2)
  car
  )

試験してみたら以下。

$ make
Testing compose ...                                              failed.
discrepancies found.  Errors are:
test ((compose car cdr) '(a b c d)) should return b: expects b => got a
$

で、実装なんですが、基本的にはリストをナニする手続きを戻す手続きを定義すれば良いのだろうか、と言いつつ以下。

(define (compose p1 p2)
  (lambda (l) (p1 (p2 l)))
  )

試験したら通った。以降はハードル高いので明日以降で。