仮想計算機構

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

Scheme

Schemeで複素関数の可視化

今までやってきたこと 複素関数の可視化 プログラム 実行結果 今後参考にしていきたいサイト 今までやってきたこと グラフィックスの下準備 その1 - 仮想計算機構 グラフィックスの下準備 その2 - 仮想計算機構 線を丁寧に描くよ - 仮想計算機構 円を丁寧…

直進形汎トロコイドの描画

以前、Schemeで描画するときに座標の取り方を指定できるようにしました。 【奥村本】座標の取り方を変えて線を描画する - 仮想計算機構これを利用して色々な線を描画していきます。今回は曲線!ってことで以下を参考にしました。 周期関数による幾何学模様の…

【奥村本】座標の取り方を変えて線を描画する

奥村さんのアルゴリズム本をSchemeでやるシリーズが滞っていたので進めます。 ちなみにこういう取り組みって権利的にどうなのか微妙だなーと思っていたところ以下のサイトで権利問題がクリアにしてあったのでとりあえず安心しています。 GitHub - okumuralab…

Schemeでカラフルな図形を描く

カラーコードを使っていい感じのグラデーションを作りたいと思っていましたがRGBを順番に変化させたとしてもカラフルな画像は作れなさそうです。ネットで色々探していたところ、HSLなるものを知りました ↓ これだ! いろんな色の指定方法とカラーコードの仕…

Schemeでセルラー・オートマトン

人工生命の本*1が積読になっていたので読み始めました。何番煎じかわかりませんが1次元セルラー・オートマトンで遊んでみたいと思います。以下、筆者の実行環境です。 OS : WIndows 10 CPU : Intel Core i5 2.60GHz 言語 : Gauche 0.9.9実験のために以前作…

SICP問題1.2

SICP問題1.2*1 以下を前置記法にする。 gosh> (/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5))))) (* 3 (- 6 2) (- 2 7))) -37/150 多分あってる。 *1:https://sicp.iijlab.net/fulltext/x116.html

SLIB(Scheme)で行列の計算をする

準備 行列式 転置行列 和 差 積 逆行列 準備 gosh> (use slib) gosh> (require 'determinant) #t gosh> (define A '((1 2) (3 4))) A gosh> (define B '((5 6) (7 8))) B 行列式 gosh> (determinant A) -2 gosh> (determinant B) -2 転置行列 gosh> (transpo…

SLIB(Scheme)で集合を使ってみる

以下の環境でSLIBを使っていきます。 CPU : Intel Core i5 2.60GHz OS : WIndows 10 言語 : Gauche 0.9.9 準備 定義 基本操作 adjoin union intersection subset? member-if もう少し高度な操作 some every notany notevery おわりに 準備 今回のテーマは集…

SLIBがインストールできたと言ったな、あれは嘘だ

はい。タイトル通りです。また躓きました。 前回はSLIBをインストールするところまでいきました。 riverta1992.hatenablog.com その後、試しにarrayでも使ってみようと思い立ったところ gosh> (use slib) gosh> (require 'array) *** ERROR: couldn't open o…

Windows環境でSLIBを使う

筆者のPC環境→OS : Windows 10, CPU : Intel Core i5 2.60GHz, Gauche 0.9.9 Schemeで(数学的な意味での)グラフを扱いたい。 SLIBというライブラリが便利らしいので早速インストール↓ The SLIB Portable Scheme Libraryインストーラーを使うので特にインスト…

バブルソート

奥村本を参考にバブルソートの実装。arrayではなくlistを使う。 前回同様C言語っぽい感じで。コードは以下の通り。 (define (bubblesort a) (define n (length a)) (define k (- n 1)) (define x 0) (define j 0) (do ;;; update () ;;; condition ((< k 0))…

選択ソート

奥村本を参考に選択ソートの実装。arrayではなくlistを使う。 再帰などは使わずにC言語っぽい感じで。コードは以下の通り。 (define (selectsort a) (define min_a 0) (define k 0) (define n (length a)) (do ((i 0 (+ i 1))) ((>= i (- n 1))) ;;; body (s…

円を丁寧に描くよ

前回*1の続き。円を描く。使うのは以下のプログラム。 ;;; circle.scm (define (gr_circle xc yc r color) (define x r) (define y 0) (do ;;; update rule ([i 0 (+ i 1)]) ;;; condition ([< x y]) ;;; body (begin (gr_dot (+ xc x) (+ yc y) color) (gr_…

線を丁寧に描くよ

以前の記事*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…