2007-07-01から1ヶ月間の記事一覧

K&Rを読もう(4) 番外 線形リスト作り。

GCC

リストが無いと死んでしまいそうなので、線形リスト作りました。汎用性を持たせるためにVALUE型にキャストして使うというRubyのネタをパクってみました。 list.h まずはヘッダ。 typedef unsigned long VALUE; struct list_struct { VALUE data; struct list…

K&Rを読もう(3) 1.5(1) catを作ろう。再帰と関数のネストのテストも兼ねて。

GCC

またまた定番。catを作ろうのコーナー。定番過ぎるので、再帰と関数のネストを使ってみました。バリバリgccオンリーのCコードデス。 #include <stdio.h> #include <stdlib.h> int main(void) { int (*f)(int) = putchar; void read_char(void) { int c; if ((c = getchar()) != </stdlib.h></stdio.h>…

今日読んだテキスト

人気の言語を作るには ---Being Popular--- OOエンジニアの輪! 〜 第 21 回 川合史朗 さんの巻 〜 ・・・。

SICPを読む(37) 問題 2.4 consの別の表現。

問題2.4 consの別の表現。何故xを返すことが出来るのか。 (define (cons x y) (lambda (m) (m x y))) (define (car z) (z (lambda (p q) p))) (cons 1 2) (car (cons 1 2)) ; 1 展開してみよう。 (car (cons 1 2)) ; (cons 1 2)を(cons x y)で展開。 (car (l…

SICPを読む(36) 2.1.3 データとは何か。

プログラムを見て「印刷ミス」なんじゃないかと思った。 (define (cons x y) (define (dispatch m) (cond ((= m 0) x) ((= m 1) y) (else (error "Argument not 0 or 1 -- CONS" m)))) dispatch) (define (car z) (z 0)) (define (cdr z) (z 1)) こんなので…

SICPを読む(35) 問題2.2 - 2.3 オブジェクト指向っぽくなってきた。

オブジェクト指向っぽくなってきましたね。今回は点と線、長方形の定義。グラフィックばっかりやってた時期があるので、馴染深い所です。 問題2.2 点と線を定義して、線の中点を出す問題。 ;segment (define (make-segment start end) (cons start end)) (de…

Vim+MzSchemeのファイル入出力がおかしい。

Vim+MzSchemeのファイル入出力がおかしい。何故かhomeのファイルを開いてしまう。PWDをいじってみたけど変化なし。うぅぅぅ。今の所の対処法は、cd.vimをいじる。 aug CD au! au BufEnter * execute ":lcd " . expand("%:p:h") au BufEnter * let $PWD = exp…

SICPを読む(34) 問題2.1 ちとはまった。

問題 2.1 そういえば「再代入の方法を知らない」という事実に気がついた。正負を逆にするだけで大変だ・・・。う〜ん、う〜ん。新しい変数を用意して代入する手もあるけど、なんかBASIC!って感じなので、パス。考えた末に、 (define (make-rat n d) (define …

SICPを読む(33) 2.1.1 いよいよリストです。

ようやく辿り着きました。今日から2章に突入です。Schemeと聞いて思いつくのは再帰、ラムダ、リスト・・・ってこれだけしか思いつかないんですが、シンプルなデータ構造にどんな魔術が潜んでいるのか。めちゃくちゃ楽しみです!!しかし、リストだけで80ページ…

関数の宣言のを自動化したい。

cで面倒なのが、関数を使う前に宣言されてないと使えないって所。関数名変えたり、引数変えたりすると面倒な作業が増えるので、自動化しちゃいたいなぁ・・・と思って、適当に作ってみた。 header ##!/usr/bin/perl my $tags = "tag"; (system("ctags -o $ta…

SICPを読む(32) 問題1.40 - 1.43 lambda, lambda, lambda。

集中力が高いうちに解こう。 問題1.40 最初、(newtons-method (cubic a b c) 1)とかやって戸惑った。 (define (cubic a b c) (lambda (x) (+ (cube x) (* (square x) a) (* x b) c))) (newtons-method (cubic 0 0 0) 1) 色々試した。 問題1.41 (((double (do…

SICPを読む(31) 1.3.4(2) Newton法

微分 微分ってホントに小さく分割して傾きを求めるのね。 (define dx 0.00001) (define (deriv g) (lambda (x) (/ (- (g (+ x dx)) (g x)) dx))) 微分法 - Wikipediaまんまですね・・・。これも新たな手続きを生み出してる。 Newton法 で、この微分を使ってN…

SICPを読む(30) 1.3.4(1) 値として返される手続き

(define (square x) (* x x)) (define (average a b) (/ (+ a b) 2)) (define (average-dump f) (lambda (x) (average x (f x)))) ((average-dump square) 10) 感動した。関数から新たな関数を生み出してるよ!!展開すると、 ((average-dump square) 10) ((la…

GCCで末尾再帰の最適化メモ。

GCC

忘れそうなのでメモメモ。gccで末尾再帰の最適化をしたい場合は、 % gcc -foptimize-sibling-calls最適化オプション-O2以上でも有効化出来る。 % gcc -O2安心して再帰が使えるようになりそうです。 参考 フリーソフトウェア徹底活用講座(21) GCC 4.1.0 の最…

K&Rを読もう(2) 1.2 - 1.3 温度変換

gcc

K&Rを見たとき、何処かで見た事のあるプログラムが多数存在する。温度変換もそのひとつ。正規表現のバイブル「ふくろう本」の例題でも使われている(読んでないけど)由緒正しき温度変換をボクノスなりに読み解こうと思う。 整数の割り算 温度変換のポイントは…

OCamlを試してみる。

なんか気になったので、OCaml試してみた。第1回 OCamlを試してみる:ITproおぉぉぉぉ。グラフィックが簡単に書けそう!!ML系は激しくとっつきにくい感じがしたけど、Schemeに慣れればそれほど難しくもないらしい。簡単な文法程度は抑えておきたいと思う。

SICPを読む(29) 問題1.37 - 1.39 連分数

エントリしてなかった。連分数の問題。連分数については、連分数 - Wikipediaを参照。 共通 (define (test f a b) (define (iter i) (cond ((<= i b) (display (format "[~a] ~a\n" i (f i))) (iter (+ i 1))))) (iter a)) 問題1.37 黄金比を見つける。絶対…

Fedora6にMIT Schemeインストール

MIT Schemeインストールしてみた。ダウンロードは以下から。MIT/GNU Scheme - GNU Project - Free Software Foundation (FSF) Fedora6へのインストール GNU/Linux binaryをダウンロード。 解凍したbin,libディレクトリを/usr/local以下に保存。 シェルから「…

SICPサポートサイトのサンプルが面白そう。

SICPサポートサイトのサンプルが面白そう。 サンプル(1章) The Game of Twenty-One(ブラックジャック) Graphing with higher-order procedures(高階手続きをグラフ表示) Continued fractions(連分数色々) 1章だけでも結構楽しそうだ!!英語だけどさ!!1章終わ…

Schemeでprintfみたいな。

Schemeでprintfみたいな処理がしたい。と思って調べたら(format)でいける。 format 覚えることは簡単。 (format "~a is ~a\n" "hoge" 10) ;"hoge is 10\n" ~aでそのまま表示。後ろに任意の引数を付ける。感覚的にprintfみたいな感じで使える。しかし、MzSche…

K&Rを読もう(1) Hello, World(2)

GCC

Hello, Worldを僕なりに書き直してみる。コンソールだけじゃつまらないので、ウィンドウに表示させようと思う。・・・といっても、ウィンドウを出すのは面倒なので、テキストでエミュレートする。 #include <stdio.h> #include <stdlib.h> enum {CONSOLE, WINDOW}; /* ウィンド</stdlib.h></stdio.h>…

zshのプロンプト設定

rootで作業することが多くなってきたので、rootもzshに乗り換えてみた。/etc/passwdを修正。 root:x:0:0:root:/root:/bin/zsh/root/.zshrcで自分の設定をインクルード。 source /home/tanaka/.zshrc お手軽。プロンプト設定を見直す。~/.zshrcを修正。 一般…

Vimでシェルのエラーを捕捉

Vim

v:shell_errorで直前に実行したシェルコマンドの戻り値を捕捉出来る。 ってことで、C言語用簡易makeコマンドMakeEasyを修正。F5キーで、保存 → make or gcc → 実行まで一気にこなす。激しく便利っす。 nmap <silent> <buffer> <F5> :call <SID>MakeEasy()<CR> function! s:MakeEasy() " wr</cr></sid></f5></buffer></silent>…

Vimで高階手続き

Vim

Vim7からの機能らしい。:h FuncrefぐへへへSICP読もう・・・。

tarメモ

まったりとLFS中です。LFSの基本はダウンロード → 解凍 → コンパイルを繰り返す。つまり、一番使うコマンド郡はwget,tar,make。 今回は、理解の足らないtarついて調べようと思う。 tarとは tarは"Tape ARchive" の略。って、いつの時代から使われているんだ…

K&Rを読もう(0) Hello, World

GCC

K&Rが発行されたのは1978年。それから30年近くの年月が流れた。未だにC言語のバイブルとして君臨しているのにはそれなりに訳があるはず。ちょっと斜め読んで見たところ、「よく見るプログラム」が多数ある。温度変換、単語の数え上げ、逆ポーランド電卓・・…

googleで英英辞書メモ。

web

googleで英英辞書。 define lambdaもっと詳しく define:lambdadefineってのがイイ!!

SICPを読む(28) 問題1.36

早寝、早起きのつもりが、遅起きデスマーチに・・・。金曜日にしてやっと早起き出来た。 問題1.36 displayとか面倒なので、trace使った。 (fixed-point (lambda (y) (/ (log 1000) (log y))) 1.1) ; 31ステップ (fixed-point (lambda (y) (average y (/ (log…

killallメモ

プロセス名でkill。 % killall gvimよく爆走させるので。参考 GNU tools ネタ元 Manpage of KILLALL マニュアル

SICPを読む(27) 問題1.35 黄金比

黄金比について調べていなかったので、調べておこう。 黄金比 いつものwikipedia。 黄金比 - Wikipedia す・凄い。必見っす。 重要な所をまとめると、黄金比はギリシャ文字の(ファイ)で表される。TeXで書くと、\phi重要な公式。 変換 黄金比の変換がx->1+1/x…