Schemeの勉強を始めた

明日から大学の授業が始まる。いよいよ専門科目が始まるが、4学期はSchemeを使うらしいので軽く予習しておこうと思う。
関数型言語emacs-lisphaskellにちょっと触ったくらい。*1
処理系はGaucheをインストールした。

% sudo apt-get install gauche{,-dev,-doc} slib

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=27051&forum=7
をさらっと読んで見たけど、このレベルなら問題ないっぽい。
とりあえずクイックソート*2

;;qsort.scm
(use srfi-1)

(define (qsort ls)
  (if (<= (length ls) 1) ls
    (let ((pivot (car ls)))
      (append (qsort (filter (lambda (n) (< n pivot)) ls))
                     (filter (lambda (n) (= n pivot)) ls)
              (qsort (filter (lambda (n) (> n pivot)) ls))))))

gosh>(load "/hogehoge/quick-sort.scm")
#t
gosh>(quick-sort (list 8 2 7 4 1 9 3 6 5 0))
(0 1 2 3 4 5 6 7 8 9)

うん。よさげ。でもやっぱりhaskellの方が見ためは直観的だ。
やっぱり「計算機プログラムの構造と解釈」を読みたいなぁ。最近本を買いすぎで金が無いから大学で借りてこようかな...あ...貸出し中なのねorz

*1:しかも、私はvim使いなので1年くらいemacsには触ってない(笑)

*2:このコードはhttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=27051&forum=7を参考にさせていただきました