(2005/03/19 00:25:46 PST)
仕事関連で STk を使っていたのですが,最近 Gauche に乗り換えました. 日本語記述を扱いやすいので重宝してます.メタオブジェクトプロトコル勉強中.
Web: http://www.nightbreak.org/ , email: you@nightbreak.org
進行中: 『Scheme でアルゴリズム』
(2005/06/25 19:51:47 PDT)
メーリングリストに詳細を投げようかと思ったけど,対象がかなり ピンポイントな気がするのでここにさりげなく書いておく(をい).
Gauche:NetBSDにも書きましたが,NetBSD/macppc 2.0.2 で Gauche 0.8.4 を make すると,メモリ不足で compile.c のコンパイルが コケました.詳細は以下の NetBSD のメーリングリストのメールを参照.
http://www.jp.netbsd.org/ja/JP/ml/port-powerpc-ja/200506/msg00003.html
http://www.jp.netbsd.org/ja/JP/ml/port-powerpc-ja/200506/msg00005.html
メモリ 256 MB のまま使おうとする時点で無謀なのかもだけどorz. MacOS X (10.3 Panther)でも compile.c のコンパイルがいつまで経っても 終わらず ^C で止めちゃいました(^^;).
とりあえず上記メールにもあるように,-O2 で行われる最適化の一部をはずせば その他は特に問題なく,make check も全て通ってます.これは,0.8.4 を 入れた後に現在の CVS 版をビルドしても同様でした.なお,上記で gencomp に 言及してますが明確な根拠はありません(ダメじゃん).
(2005/06/07 01:33:02 PDT)
Gauche 0.8.4 にsrfi-42が 入っていたので,早速以前書いた内包表記を試してみました.
gosh> (use srfi-42) #<undef> gosh> (list-ec (: x 5) (if (even? x)) (: y 5) (if (odd? y)) (list x y)) ((0 1) (0 3) (2 1) (2 3) (4 1) (4 3)) gosh> (string-ec (: x "今日は良い天気でした") (if (char<=? #?亜 x)) x) "今日良天気"
良かった,合ってた(をい).
(2005/05/25 04:33:39 PDT)
とある理由で適当に作ったのですが,書き捨てはちょっともったいない 気がしたのでここに貼り付け.
(define (string->number-bindecimal str)
(define (decimal dlist n)
(if (null? dlist)
0
(+ (decimal (cdr dlist) (/ n 2))
(if (equal? (car dlist) #?1) n 0))))
(let ((pnum (string-scan str ".")))
(if pnum
(let ((istr (substring str 0 pnum))
(dstr (substring str (+ pnum 1) (string-length str))))
(+ (string->number istr 2) (decimal (string->list dstr) 0.5)))
(string->number str 2))))
(define (number->string-bindecimal num)
(define (decimal dnum ret)
(if (or (= dnum 0) (> (string-length ret) 10)) ;; 10桁未満固定
ret
(let* ((r (* dnum 2))
(x (if (>= r 1) (- r 1) r))
(c (if (>= r 1) "1" "0")))
(decimal x (string-append ret c)))))
(let* ((inum (inexact->exact (truncate num)))
(dnum (- num inum)))
(string-append (number->string inum 2)
(if (zero? dnum) "" (decimal dnum ".")))))
(string->number-bindecimal "1111.01")
=> 15.25
(string->number-bindecimal "1111.111")
=> 15.875
(number->string-bindecimal 1024.125)
=> "10000000000.001"
(number->string-bindecimal 0.625)
=> "0.101"
(string->number-bindecimal (number->string-bindecimal 123.456))
=> 123.455078125
n進数化は難しくないと思うけど,需要なさそうだしなあ(苦笑).
(2005/05/09 19:55:55 PDT)
他の処理系の話ですが(^^;),本来の Windows CE 版だけでなく Windows NT/2000 版がある上に,Unicode にも対応していることを 最近知りました(正規表現は 8 ビットキャラクタ限定みたいですが). 簡易エディタもついていて,Scheme 布教用(?)に最適かも.