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)))) )
これは簡潔ですな。多値って素晴しい。初めて使ったんですがこれはなかなか。