EoPL reading (14) 1.2.4 Exercises

sort が微妙に気に入らない。多値を使って云々。
最初こうしてました。

(define (sort lon)
  (define (min lst)
    (let f ((rslt (car lst)) (ret '()) (l (cdr lst)))
      (if (null? l)
	  (values rslt ret)
	  (if (> rslt (car l))
	      (f (car l) ret (cdr l))
	      (f rslt (cons (car l) ret) (cdr l)))))
    )
  (if (null? lon)
      '()
      (receive (min-item remainder)
	       (min lon)
	       (cons min-item (sort remainder))))
  )

直前エントリと同様に要素が消える。ってか消してる、という事で以下に修正したら試験パス。

(define (sort lon)
  (define (min lst)
    (let f ((rslt (car lst)) (ret '()) (l (cdr lst)))
      (if (null? l)
	  (values rslt ret)
	  (if (> rslt (car l))
	      (f (car l) ret (cons rslt (cdr l)))
	      (f rslt (cons (car l) ret) (cdr l)))))
    )
  (if (null? lon)
      '()
      (receive (min-item remainder)
	       (min lon)
	       (cons min-item (sort remainder))))
  )

これは簡潔ですな。多値って素晴しい。初めて使ったんですがこれはなかなか。