素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter すかいぷ:javascripter_ , javascripter あっと tsukkun.net twitterにどうぞ。

scheme

データ構造等のメモ

Schemeにあるデータ構造についてのメモ。よく分かってない。 数値 1 0.1 99999999999999999999999 ; 大きい数が扱える (* 1 6) ; 6 (= (0.1 * 6) 0.6) ; # #f 小数が絡むと演算の誤差が入る (/ 1 7) ; 有理数が扱える Schemeでは正確数と不正確数に分かれて…

コンパイル時FizzBuzz

http://anond.hatelabo.jp/20081025202001(via b:id:qnigy)で、こういうのはやっぱりSchemeだなと思って書いた。よく考えれば、ファイルに書き出すまでをあらかじめしておけばよかった。

マクロ

(define-macro (alias new-name old-name) `(define-macro (,new-name . body) `(,,old-name ,@body))) (alias -> 'lambda) (alias identity 'values) (alias いふ 'if) old-nameをシングルクオートで括っているのは、特殊形式に対応するため。 マクロを定義…

疑似ハッシュ

ハッシュのようにアクセスできるけどコンパイル(マクロ展開)時にvectorのインデックスに置き換えられるようにする。 (define-macro (let-pseudo-hashtable accessor-name key&value . body) (let ((key-table (make-eq-hashtable)) (value-vector (gensym)))…

非決定性計算

4つの数字から10になる式を探すプログラム(切符の問題とも呼ばれる)を書いた。choose関数とfail関数は、404 Not Foundをypsilon上で動くように少し直した物。 (define *paths* '()) (define *fail* (gensym)) (define (choose choices) (if (null? choices) …

オブジェクトシステム

(define *table* (make-eq-hashtable)) (define boot-object (lambda (object) (if (not (hashtable-contains? *table* object)) (let ((proto (make-eq-hashtable))) (hashtable-set! proto '__proto__ #f) (hashtable-set! *table* object proto))))) (def…

継続むずかしい…

関数を実行するたびに値を増やすカウンタを作ろうと思って、継続つかえないかなと思ったけど、むずい。 下の場合だと、一度(counter)した時、(define counter (make-counter))までのぼるので、counter自体が再定義されちゃう(defineで再定義してるから実行結…