2009-04-01から1ヶ月間の記事一覧

Gaucheでエラトステネスの篩で素数ストリーム(世間一般のやつより速い)

Haskellなどで人気の1行エラトステネスの篩は、アルゴリズム本来の計算量より遅いらしい。 sieve (p : xs) = p : sieve [x | x <- xs, x ‘mod‘ p > 0] LtU:The Genuine Sieve of Eratosthenes Wikipedia:en:Sieve of Eratosthenes それを受けて、LtUで以下の…

Gaucheでアトキンの篩で素数リスト

内包表記、百花繚乱。 ナイーブな実装なので、がんばればもっと速くなる。参考文献をどうぞ。 うっかり list:ec とtypoして、気づくのに20分ほど無駄にしたのはナイショだ。 (use srfi-42) (define-syntax vector-flip! (syntax-rules () ((_ vec i) (vector…

Gaucheで素数の二進法表記

二進数表記に変換してみる - みずぴー日記 経由 素数の二進法表記 - 西尾泰和のはてなダイアリー format "~8@a" で右詰めにして、trで"01"を":#"に変換する。 trの呼び出しを1回にしているのがミソ。 (use srfi-1) (use srfi-42) (use text.tr) (define (pri…

XPCOMでUTF-8文字列から入力ストリームを作る

最近、XULの勉強をしている。 Gaucheの豊富なポート操作に慣れているおかげで、XPCOMのストリームの理解がそれほど苦にならない。 GaucheはポートにバイナリIOとキャラクタIOを混ぜて使えたり、ファイルを重複して開いてもポートへの操作を共有してくれたり…