STkからGaucheに乗り換えました. 日本語記述を扱いやすいので重宝してます.
Web: http://nbk.bz/ , email: y@nbk.bz
($date)
15年以上ぶりのWiLiKi更新…マジか.
現在,KiloにいろんなLISP処理系(Gaucheの他にはGNU Guile,Chibi-Scheme,ECL)を組み込んで遊んでいます.概要はこちらのTwitter投稿から.
https://twitter.com/ytaki0801/status/1377852782389043200
Gaucheについては,Scm_EvalCStringが未定義でも値を返してくれるのと,write-to-string/SCM_BIND_PROCのScm_ApplyRec1とその戻り値のSCM_STRING_BODY_START/SCM_STRING_BODY変換のおかげで,eval-last-sexp相当(と括弧対応)が割といい感じに使えてます.なお,実際に組み込んでいるコードは,チュートリアルサイトのStep 130を用いています.
Kilo自体がUTF-8未対応ということもあって,readline代わりの学習用くらいしか用途がなさそうですが,需要があればGauche-kilo(Kilo-gauche?)みたいに独立してGutHubとかに上げることも考えてます.いや,他の処理系については対応があまり進んでないのと,今の複数処理系対応コードだとライセンス管理が酷いことになりそうというか….
(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 布教用(?)に最適かも.