仮想計算機構

IT業界と無縁な派遣社員のブログ

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

線を丁寧に描くよ

以前の記事*1で作成したgrBMP.scmを使って線を描いてみます。以前作ったプログラムだけでは真っ黒な画像しか作れないので、線を描画するためのプログラムline.scmを準備しました。例によってこちらも奥村本 (p.65) のC言語のコードをSchemeに書き換えたもの…

グラフィックスの下準備 その2

以前の記事*1でputbytesなる関数を定義しました。これは奥村晴彦さんの本に記載のプログラムをSchemeで書き直したものです。今回はその続きで、grBMP.c (奥村本 p.63)のScheme版を完成させます。 といってもputbytesを作った時点でほぼ完成しており、あとは…

多次元配列

Schemeで多次元配列を使ってみる。 まずはサイズ(2, 3)の配列aを定義。値はすべて0で初期化します。 (use gauche.array) (define a (make-array (shape 0 2 0 3) 0)) (print a) (print "array size : " (array-size a)) 実行結果は以下のとおり。 #,(<array> (0 2 0</array>…

Schemeのモジュールを使ってみる

グラフィックスの話はいったんお休みにして、モジュールとやらを試してみます。 #| test_module.scm |# (define-module test_module (export hello) (define (hello) (print "hello") ) ) helloと表示する関数を定義しただけの面白くもなんともないモジュー…

グラフィックスの下準備 その1

Schemeでシミュレーションの可視化がしたい。。。 というわけでグラフィックスのプログラムを準備していきます。奥村さんの本でビットマップファイルを扱うプログラムがあるので、同様のことをSchemeでできるように頑張ります。奥村本p.63にはWindows BMP形…

自然対数の底

Schemeで自然対数の底の計算。 リファレンスを参考にしつつ、反復回数を100にして実験してみる。 (define n 1) (define e 0) (define a 1) (define max_loop 100) (do ([i 0 (+ i 1)]) ([= i max_loop] [print e]) (begin #|(print e)|# (set! e (+ e a)) (s…

エジプトの分数

エジプトの分数 与えられた分数「m/n」を「1/xの和」に書き換えるプログラム。 C言語で書かれた奥村晴彦さんのプログラムを参考にしつつ適当に書いてみた。 (define (f m n) (if (= (remainder n m) 0) (cons n ()) (cons (+ (floor (/ n m)) 1) (f (- (* m …

値の交換

Schemeで値の交換 (define a 10) (define b 5) (print "a is " a) (print "b is " b) (print "Exchange!!") (define c a) (define a b) (define b c) (print "a is " a) (print "b is " b) Gauche 0.9.9での実行結果は以下の通り。 a is 10b is 5Exchange!!a…