kiyoka.2009_08_18 RSSPLAIN

Related pages: !kiyoka.blog.list !kiyoka.blog.2009_08
455555555555555555555555555555555555555
4

[Nendo] 次はアプリを試作してみよう(3)

5

私がRubyで書いているLisp方言、 Nendoの開発状況続き。

5

 

5

let* と case と condの (text => expr) 形式をサポートした。

5

あとは、assoc系のユーティリティを作ったら、本格的にstowspecのプログラミングに戻ろうと思う。

5

 

5

さて、stowspecの抜粋を紹介しよう。

5

例えば、xxxx.tar.gz から .tar.gzを外した部分(basename)を求めるプログラムは次の様に書けるようになった。

5
;; `regex' is a string ( not a regex object )
5
;; returns ( $0-string  $1-string  $2-string  $3-string ... )
5
(define (regex-match regex str)
5
  (let1 matchdata ((. str match) regex)
5
    (if matchdata
5
        (matchdata.to_a.to_list)
5
        nil)))
5
5
(define (tgz-to-basename tgz)
5
  (define archive-file-pattern "([a-zA-Z].*)")
5
  (cond
5
   ((regex-match (+ "^" archive-file-pattern "(.tar.gz|.tgz|.tar.bz2)$") tgz)
5
    =>
5
    (lambda (m)
5
      (second m)))
5
   (else
5
    nil)))
5
5
;; test
5
(list
5
 (tgz-to-basename "abc-1.2.3.tar.gz")
5
 (tgz-to-basename "abc-1.2.3.tar.bz2")
5
 (tgz-to-basename "abc-1.2.3.tgz")
5
 (tgz-to-basename "file.txt"))
5

 

5

結果は、以下の通り。

5
(abc-1.2.3 abc-1.2.3 abc-1.2.3 nil)
5

 

5

regex-matchが返すmatchdataの取りまわしがcond で自然に書ける様になった。

5

 

5

...comment disabled...