さらにGauche2日目

defineの中でさらにdefineできるらしい.ある関数Aからしか呼ばれないようなローカルな関数(?)Bを作る場合は,関数Aの定義内でBを定義する方が良い.

そこで,バブルソートを修正.

注:このプログラムは間違えています.

#!/usr/bin/env gosh
(define (bsort lstdata)
(define (bsort-swap x lst)
(if (pair? lst)
(if (< x (car lst))
(append (list x) lst)
(append (list (car lst)) (bsort-swap x (cdr lst)))
)
(list x)
)
)
(if (pair? lstdata)
(
append (list (car (bsort-swap (car lstdata) (cdr lstdata))))
(bsort (cdr (bsort-swap (car lstdata) (cdr lstdata))))
)
lstdata
)
)
(define (main args)
(let ((inputlist `(9 0 1 8 2 7 3 6 4 5)))
(print inputlist)
(print (bsort inputlist))
)
)

すっきりしたかな….(ソーティングがこれでいいのかは未だ疑問)

コメントする