さらに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))
	)
  )

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