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

数学ガールと買った本。

数学ガール プログラマの数学が面白かったので、結城さんの数学恋愛小説?「数学ガール」買ってみました。かなり面白いです。数学ガール (数学ガールシリーズ 1)作者: 結城浩出版社/メーカー: SBクリエイティブ発売日: 2007/06/27メディア: 単行本購入: 58人…

Gaucheで日本語プログラミングしよう

なんとなく日本語プログラミング環境が欲しくなったので、Gaucheで日本語プログラミングしてみた。 gosh> (define なまえ define) なまえ gosh> (なまえ たす +) たす gosh> (なまえ らむだ lambda) らむだ gosh> (なまえ いっこたす (らむだ (えっくす) (た…

K&Rを読もう(21) 2-1 変数名

GCC

今日から2章に入ります。2章からは本格的に文法を扱っていくようです。文法ってとにかく面倒で大嫌いなんですが、C言語の文法をしっかり学んだ事が無いので飛ばさず学んでいきたいと思います。これからお世話になりそうだからな・・・。 変数名 「内部名では…

bash&zshでシングルクォートのエスケープ

ハマったのでメモ。bash&zshでシングルクォートのエスケープをする場合はちょっとしたテクニックが必要らしい。 ダメダメ例 ダメダメなエスケープ。 % echo 'tanaka\'s OS' quote>残念ながら'tanaka\'で終わってしまう。 回避する。 エスケープするにはちょ…

sgrepメモ。

sgrep凄すぎ。 Sgrep - Home page ダウンロード。 メモ帳 - sgrep sgrepの使い方 C言語のコメント抽出 C言語のコメントを抽出してみよう。 % sgrep '"/*" .. "*/"' ex-1-23.c /***************************************** * * ex-1-23.c * *****************…

K&Rを読もう(20) 演習 1-24 括弧の釣合(4)

GCC

さて、最終段階に入ります。更なる抽象化を進めるためには高階関数を使うしかない!!1章の最後なので気合いを入れて挑みます。 #include <stdio.h> #include <stdlib.h> typedef struct { char *stack; int index; } Stack; void err_exit(const char s[]) { fprintf(stderr, s)</stdlib.h></stdio.h>…

K&Rを読もう(19) 演習 1-24 括弧の釣合(3)

GCC

やはり気になるので修正を加えた。引用符'\\'の処理でかなりハマった。 #include <stdio.h> #include <stdlib.h> void next(int *cp, int *np) { *cp = *np; *np = getchar(); } void quote(char q, int *cp, int *np) { while (*cp != EOF) { next(cp, np); if (*cp == '\\') {</stdlib.h></stdio.h>…

K&Rを読もう(18) 演習 1-24 括弧の釣合(2)

GCC

相当自信無し。 #include <stdio.h> #include <stdlib.h> #define MAX_BUFFER 1024 enum {OUT, COMMENT_IN, SQ_IN, DQ_IN}; void err_exit(void) { fprintf(stderr, "釣合が取れてません。\n"); exit(EXIT_FAILURE); } int main(void) { int c,d,next; int i = 0; int status = </stdlib.h></stdio.h>…

K&Rを読もう(17) 演習 1-24 括弧の釣合(1)

GCC

1章の最終問題です。激しくムズい!! 括弧の釣合が取れているかチェックする問題。これだけなら良いのだが「引用符・2重引用符・コメントがあった場合の処理も追加せよ」という難問。 とりあえず問題を切り分けよう。引用符チェック無しで解く。 #include <stdio.h> #i</stdio.h>…

K&Rを読もう(16) 演習 1-23 コメントの除去

GCC

/* */コメントの除去。 //==== コメント除去テスト /***************************************** * * ex-1-23.c * *****************************************/ //==== ここまで #include <stdio.h> #include <stdlib.h> enum {IN, OUT}; int main(void) { int c,d; int status </stdlib.h></stdio.h>…

K&Rを読もう(15) 演習 1-22 テキストの折り返し

GCC

K&Rの演習が段々むずかしくなってきたぞぉぉぉぉ。 指定文字数でテキストの折り返しを作る問題。長い単語にも対応しなければならないらしい。 #include <stdio.h> #include <stdlib.h> #define LINE 40 #define WORDMAX 1024 int main(void) { int c; int i = 0,j; int len = 0;</stdlib.h></stdio.h>…

K&Rを読もう(14) 演習 1-21 スマートタブ

GCC

GNUインデント 世の中には様々なインデント方式がある。その中でも最も奇妙なインデント方式がGNUであろうと思う。最初にGNU方式を目にしたときはハァ?ナンダコレ?などと思ったが、今はそのインデント方式が少し理解できるようになった。 スマートタブ さて…

K&Rを読もう(13) 演習 1-20 tabをスペースに変換。

GCC

演習 1-20 tabをスペースに変換する問題。タブをスペースに変換しても見えないので>----とVimっぽくしてみる。 #include <stdio.h> #include <stdlib.h> int main(void) { int c; while ((c = getchar()) != EOF) { if (c == '\t') printf(">-------"); else putchar(c); } exit</stdlib.h></stdio.h>…

SICPを読む(40) 2.1.4 区間算術演算

問題設定が読み取りにくかった。要するに、電気抵抗には誤差があるので「誤差を計算するシステム」を作りたい。ということらしい。とりあえず電気抵抗無視で行こう。 区間について 区間intervalってのが、想像しづらいので、RubyのRangeクラスのように表現し…

Vimのちょっとしたマクロ技。

Vim

僕がVimでデバッグするときは、 :!!と、前のコマンド実行をしているんですが、前のコマンドで:「!rm *」なんて事をしていると、ファイルをまるごと消してひどい目にあったりするので、なんか良い手はないかなぁ・・・と思ってたら、「そうだ、マクロがあった…

K&Rを読もう(12) 演習 1-19 文字列の逆順表示

GCC

今回はcopy関数の応用です。結構めんどい。 演習 1-19 文字列sを逆に並べよ。 ま、コピーの逆をすればいいな。と甘く考えていたけど、よく考えたら、C言語の文字列は、 012345\n\0となるので、文字列の逆は、 543210\n\0となる。つまり、「改行をコピーして…

K&Rを読もう(11) 演習1-17 - 18 やはり古典は読むべし。

GCC

K&Rを読むべきか!?と思っていたがやはり読んで正解だった。古典には良質な問題が付いている。解答も付いていないので、正解を探る楽しさもある。生き残った古典には訳がある。やはり古典は読むべし。 演習 1-17 まずは肩慣らし、80文字以上の行を表示する。…

K&Rを読もう(10) 演習1-16 これでいいのか不明。

GCC

世界中を飛び回ってみたけど演習1-16は(世界中で?)評判が悪い。問題の意味が全くわからない。 「プログラミング言語C(第2版)」第一章演習の答え を参考に書いた。(ほぼコピペ) バッファがオーバーフローした時は読み飛ばして、1行を取得せよ? int main(voi…

SICPを読む(38) 問題 2.5 べき乗の逆算。

問題を読んでも問題の意味が掴めなかったので、答えを見た。答えを見てもさっぱりわからなかったので放置していたけど、もう一度答えを見ていたらやっと掴めた!!まずは、consの定義。 (define (cons a b) (* (expt 2 a) (expt 3 b))) consを実行してみると、…

ハッカー養成塾のリンク集。

HackerIncubator - オープンソースマガジン連載「ハッカー養成塾」リンク集うっほ。グレイト!!お勧めはやはり。ひげぽん OSとか作っちゃうかMona- - ハッカー養成塾:ハッカーへの遠回りバイブルっす。

SICPを読む(39) 問題 2.6 Church数

わからないときは、わかっている所を書き出そう。 Church数ってなんだ!! 404 Blog Not Found:TuringとChurchの狭間で 要は、ある数は、ある関数fを何回xに適用するか、という定義にしてしまうのである。 Church 数 -- OCaml.JP OCamlだけど、わかりやすい。 …

K&Rを読もう(9) 1.9 文字配列

GCC

C言語で凶悪なのが、文字配列。というか、文字列自体あんまり得意じゃない。今回は、配列で行の取得。スクリプト言語に慣れてると固定長配列は凄くキツイ。テキストファイルについての考察。 行はは文字の連続と改行で表されて、 ファイルは行の連続と、EOF…

ハッカーと画家と英語の本

ハッカーと画家 オンラインでも読めるけど買ってみた。ハッカーと画家 コンピュータ時代の創造者たち作者: ポールグレアム,Paul Graham,川合史朗出版社/メーカー: オーム社発売日: 2005/01/01メディア: 単行本購入: 109人 クリック: 4,884回この商品を含むブ…

K&Rを読もう(8) 1.7 図解Schemerの再帰脳

GCC

Schemerは再帰が無いと生きていけない。再帰で考えた方がシンプルに問題が解ける。K&R 1.7のテーマはべき乗。丁度良い題材なので、Schemerの再帰脳を復習しておこう。 Schemerは再帰で考える。 2の10乗をやろう。2の10乗。つまり、2を10回掛けるってこと。展…

K&Rを読もう(7) 演習 1-14 またまたヒストグラム表示

GCC

さて、問題を解こう。またまたヒストグラム。 演習 1-14 今度は文字の頻度。 #include <stdio.h> #include <stdlib.h> void hist_iter(int count[], int start, int end) { int i, j; for(i = start; i <= end; i++) { printf("%c(%2x) : %2d ", i , i, count[i]); for (j = 0; </stdlib.h></stdio.h>…

C言語でJavaScript風prototypeを作ってみた。

GCC

JavaScriptのプロトタイプってこんな感じかなぁと思って、C言語でJavaScript風プロトタイブを再現してみた。配列だけど。 #include <stdio.h> #include <stdlib.h> struct p2d { double x; double y; double (**prototype)(struct p2d *); }; typedef struct p2d Point2D; typed</stdlib.h></stdio.h>…

K&Rを読もう(6) 演習 1-13 単語の長さのヒストグラム表示

GCC

今回は激しくメンドクサイヨ。ヒストグラムも定番っすね。 演習 1-13 入力された単語の長さをヒストグラム表示せよ。これは応用でいける。 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #define MAX_COUNT 10 void print_histgram(int n) { int i; for (i = 0; i < n; i++</ctype.h></stdlib.h></stdio.h>…

K&Rを読もう(5) 1.5(2) 関数チェーンを使ってwcを作ろう。

GCC

地震の影響で会社が休みになってしまった。さて、リストが出来たので早速料理再開。今回のテーマはwc。wcも定番っすね。線形リストを使って関数チェーンを作っていこうと思います。イメージはこんな感じです。 count_word > count_line > count_char > print…

glibメモ。

GCC

エンジンの仕組みを知らなくても車は運転できる。しかしエンジンの仕組みを知っていればより上手く車を運転することが出来る。車輪の再発明は避けるべきだが、車輪を知るための車輪作りは必要なのだ。しかし、車輪の再開発ばかりしていてもマズイ。車輪を使…

K&Rを読もう(6) 演習 1-8 - 1-12 空白をゴニョゴニョ

GCC

ソースが長くなってしまうので普通にやろう。 演習 1-8 空白とタブと改行を数える。なんとなくenumが使いたくなったので、enumを使用する。 #include <stdio.h> #include <stdlib.h> enum {WHITE , TAB, BREAK}; int main(void) { int c; int count[BREAK + 1] = {0, 0, 0}; whi</stdlib.h></stdio.h>…