プログラム

scheme(gauche)でxorshift乱数

SICP 3.1.2節のために。 (define (shift-32bit n count) (logand (ash n count) #xFFFFFFFF)) (define (make-xorshift-rand x y z w) (lambda() (let ((t (logxor x (shift-32bit x 11)))) (begin (set! x y) (set! y z) (set! z w) (set! w (logxor (logxor…

Haskell+gtk+gtkglext

gearsを移植。frame rateの表示とか、物体の回転とかは省いている。物体の回転は、quaternionで実現する予定。 {-# LANGUAGE TypeFamilies #-} import System import List import Control.Monad import Control.Monad.Trans import Data.IORef import Data.T…

Haskell OpenGLで物体の回転

Quaternionをつかって物体の回転を行うプログラム。 3D‐CGプログラマーのためのクォータニオン入門―「ベクトル」「行列」「テンソル」「スピノール」との関係が分かる! (I・O BOOKS)の付録の移植。 LinearSpace -> Quaternionとクラスを積んでいく。 LinearS…

HaskellのVector library

簡単な習作 import qualified Data.Vector as V import Data.Tensor main :: IO () main = do V.mapM_ createFrame tIndices where l :: Float l = 0.5 vertexData::V.Vector (Vertex3 Float) vertexData = V.fromList [ Vertex3 (-l) (-l) (-l), Vertex3 l …

2次元格子ランダムウォーク

Haskellで2次元格子ランダムウォークを書いてみた。 全然、Haskellで書いた気がせず不満。 IOと評価を分けたいが次の課題。 import Data.IORef import Control.Applicative import Data.Foldable import System.Random.Mersenne import System.Exit (exitWit…

Scalaで図形言語

Scalaで図形言語に挑戦してみた。まだ、Scalaってコードではないけど…。 まずはベクトルClass // Vector2d Class // newを省くためにcase classにする。 case class Vector2d(xVal: Double, yVal: Double) { val x: Double = xVal val y: Double = yVal over…

Haskellで図形言語

HaskellでGUIに挑戦してみた。gtk2hsとcairoでSICPの図形言語に挑戦。 まずは、簡単なベクトル演算のclass data Vector2d = Vector2d { xcor :: Double, ycor :: Double } deriving (Show,Eq) instance Num Vector2d where (+) v1 v2 = Vector2d { xcor = xc…

続・Haskellで図形言語

高階関数版とWindowsSizeが可変しても、サイズに合うように。 --waveModify.hs --SICP 図形言語 --Window Sizeが可変可能であることに対応 --高階関数版 import Vector import Graphics.UI.Gtk as Gtk import Graphics.Rendering.Cairo as Cairo data Frame …

scalaからjarを作る。

OSはLinuxと言うことでメモがわりに。まずは、対象となる定番のHello World HelloWorld.scala object HelloWorld { def main(args: Array[String]):Unit = println("Hello World!!!") } Manifest.mf Manifest-Version: 1.0 Main-Class: HelloWorld Class-Pat…

Haskell

この年末にHaskellプログラムの環境を整えたけど、仕事で書くコードでおなかがいっぱいで手が出ない。 C言語も極めればDeepですが、ちょっと厭き気味。

Haskellにトライ

移動中はHaskellをかじってみる。Lispより直感的で、記号操作的にかけるので楽しい言語。 あと、型の制約が厳しいのでデバッグしやすい。 高級言語での型制約の重要性がよくわかる。普段はC言語せいぜいC++までなので、 いろんな意味で新鮮。ちなみに参考書…

いつもの日曜日。

朝起きて、走りにいこうと思ったが、眠気に負ける。朝、嫁さんを見送った後、横になっていたら寝てしまい気づいたら昼過ぎ。 その後、確率過程と量子力学を少し勉強して、プログラム。OSのメモリ管理を考えているが、色々考えると面倒。単純に作った方がいい…

GWでやったこと。 ・AT互換機をブートさせて、Protect modeにして、FATからelfファイルを読み込んで実行。 ・量子論の基礎―その本質のやさしい理解のために (新物理学ライブラリ)を使っての勉強を開始。 ・確率過程の勉強。 結局は、天気に負ける。

SICP ex 2.45

(define (split b1 b2) (lambda (painter n) (if (= n 0) painter (let ((smaller ((split b1 b2) painter (- n 1)))) (b1 painter (b2 smaller smaller))))))

SICP ex 2.44

(define (up-split painter n) (if (= n 0) painter (let ((smaller (up-split painter (- n 1)))) (below painter (beside smaller smaller)))))

SICP ex 2.36

(define (accumulate-n op init seqs) (if (null? (car seqs)) '() (cons (accumulate op init (map (lambda (s) (car s)) seqs)) (accumulate-n op init (map (lambda (s) (cdr s)) seqs)))))

SICP ex 2.27

(define (deep-reverse items) (define (iter dst src) (if (null? src) dst (let ((leaf (if (pair? (car src)) (deep-reverse (car src)) (car src)))) (iter (cons leaf dst) (cdr src))))) (iter (list) items))

SICP ex 2.18

(define (reverse l) (define (iter dst src) (if (null? src) dst (iter (cons (car src) dst) (cdr src)))) (iter (list) l))

SICP ex 2.51

(define (below painter1 painter2) (let ((split-point (make-vect 0.0 0.5))) (let ((paint-top (transform-painter painter1 split-point (make-vect 1.0 0.5) (make-vect 0.0 1.0))) (paint-bottom (transform-painter painter2 (make-vect 0.0 0.0) (ma…

SICP ex 1.37

まずは、再帰的手続きで。 (define (cont-frac n d k) (define (iter i) (if (= i k) (/ (n i) (d i)) (/ (n i) (+ (d i) (iter (+ i 1)))))) (trace iter) (iter 1)) つぎに、反復的手続きで (define (cont-frac n d k) (define (iter result i) (if (= i 0…

SICP ex 1.16 再び

再び書いてみたら、以前書いたものと違っていた。 (define (fast-expt b n) (define (fast-expt-iter a b n) (cond ((= n 0) a) ((even? n) (fast-expt-iter a (square b) (/ n 2))) (else (fast-expt-iter (* a b) b (- n 1))))) (fast-expt-iter 1 b n)) (…

SICP ex 1.19

の変換なので、ベクトルで表すと、 から は,からベクトルで表すと、 から、対数的ステップ数の手続きは、 (define (fib n) (fib-iter 1 0 0 1 n)) (define (fib-iter a b p q count) (cond ((= count 0) b) ((even? count) (fib-iter a b (+ (* p p) (* q q)…

SICP

プログラミングGaucheを買ったのに触発されて、また始めることに。改めて1章から。結構、身についているじゃないの?

qemuでgrubからGNU multibootのサンプルを動かす

# losetup -o 32256 /dev/loop0 hda.img # mount -t vfat /dev/loop0 /mnt # cp kernel.elf /mnt # qemu -hda hda.img qemuが起動して、 grub> root (hd0,0) grub> kernel /kernel.elf grub> boot で起動。

進まない

SICPがなかなか進みません。仕事のプログラミングの時間を割くわけにも行かないし。 かといって、物理と数学の時間を割きたくないし・・・。 これもGWの企画にひとつにあげとくか・・・。

GWにやること

今年のGWは遠出できなさそうなので、家で何かしようと思っている。 候補は、 簡単なOSを作る。 JTAGケーブルを作って、遊び倒す。 理論電磁気学をできる限り読み続ける。 だが、JTAGケーブルが第一候補かな?

日本語訳

日本語訳の計算機プログラムの構造と解釈を買ってしまいました。 社会人の時間のなさに負けました。

SICP ex 1.16

ヒントより、 と成るような状態遷移を考える。 で、nが奇数のときaに押しつける。 (define (even? n) (= (remainder n 2) 0)) (define (square a) (* a a)) (define (fast-expt-iter b n a) (cond ((= n 0) a) ((even? n) (fast-expt-iter (square b) (/ n 2…

SICP ex 1.12

Pascalの三角形を頂点の数から添え数を次の様に振ってみる。 とすると の関係があることがわかる。 でのときは1なので再帰的プロセスで記述した場合 (define (pascal_term n m) (cond ((> m n) (display "invaild arg")) ((= m 0) 1) ((= n m) 1) (else (+ (…

log(x)の近似

組み込みのプログラムで一回のそれほど精度を要求されなlog計算で、 mathライブラリを入れるのも癪なので、以下のような近似を使った。 幸いにして、平方根を求める命令があったので。2048乗根は11回平方根を繰り返すことで求める。