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

K&Rを読もう(37) 演習3-4 - 3-6 itoa

GCC

今回は数値を文字列に変換する問題。 演習 3-4 サンプルのitoaはINT_MINの値が正しく処理出来ない。何故か&修正せよ。まず、INT_MAX,INT_MINの値を確認する。 INT_MAX 2147483647 01111111111111111111111111111111 INT_MIN -2147483648 1000000000000000000…

C言語でRubyライクなブロックを

GCC

マクロでブロック渡せば良いんじゃないかなぁ。 #include <stdio.h> #include <stdlib.h> #define times(n, i, block) for (i = 0; i < n; i++) block int main(void) { int i,j; times(3, i, { printf("outer block : %d\n", i); times(3, j, { printf(" inner block : %d\n", </stdlib.h></stdio.h>…

K&Rを読もう(36) 演習 3-3 aからzまで。

GCC

デジャブ? 演習 3-3 文字列s1の中のa-zのような省略記法を、それと等価な完全リストabc..xyzにしてs2の中に展開する関数expand(s1, s2)を書け。大文字、小文字、数字を許し、a-b-cやa-z0-9や-a-zのような場合も処理出来るようにせよ。先頭及び最後の-は文字…

K&Rを読もう(35) 演習 3-2 特殊文字のエスケープ

GCC

なんだか危険な香りのする問題。 演習 3-2 \n,\tを\\n,\\tに変換する問題。escape(s, t)だと、問題がありそうな関数なので、mallocを使ってメモリを確保した。 #include <stdio.h> #include <stdlib.h> #include <string.h> char *escape(char *s); int main(void) { char *e; e = escape(</string.h></stdlib.h></stdio.h>…

K&Rを読もう(34) 演習 3-1 バイナリサーチ

GCC

二分探索というやつですね。半分の半分の半分の・・・とやっていく方法。検索以外にも応用が効く。計算処理の高速化とか。バグ探しとか・・・。 演習 3-1 僕の頭が弱いので、再帰で挑戦。 #include <stdio.h> #include <stdlib.h> #include <time.h> #define MAX 0x100000 int binsearch</time.h></stdlib.h></stdio.h>…

Perlのforとforeach

ラクダ本より。foreachはforの同義語。だから、foreach ($i = 0; $i う、うまくいくかな。 % perl -e 'foreach ($i = 0; $i < 10; $i++) {print $i;}' 0123456789出来たぁ!!ラクダ本持ってるだけで読んでないことが判明した(汗 参考 ラクダ本 第3版 Volume1 …

aからzまで表示

久しぶりにperl % perl -e 'for("a".."z"){print "$_, ";}' a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, % perl -e 'for("00".."10"){print "$_, ";}' 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, Prelスゲー。 a2z …

K&Rを読もう(33) 2.12 優先度と評価順序

GCC

優先順位って面倒だと思う今日この頃。You, 全部括弧つけちゃいなよ。 インクリメントの副作用 K&R P66より。予測と異なる答えが出た。 #include <stdio.h> #include <stdlib.h> int main(void) { int c = 'a'; printf("%c %c %c %c\n", c++, c++, c++, c); return EXIT_SUCCESS</stdlib.h></stdio.h>…

K&Rを読もう(32) 演習 2-9 - 2-10 bitcount

GCC

感動した。 演習 2-9 2の補数システムでは、x = x & (x - 1)により、xの最も右の1ビットが消える。何故かを説明せよ。この事実を使って、もっと早いbitcountプログラムを書け。 説明 01110000で説明する。x - 1をすると、 01110000 - 1 = 01101111一番右の1…

K&Rを読もう(31) 演習 2-6 - 2-8 ビット結合

GCC

この演習問題しんどかった。インラインアセンブラで死にそうに・・・。 演習 2-6 位置pから始まるnビットのyの右端のnビットにセットし,他のビットをそのままにしたxを返す関数setbits(x,p,n,y)を書け。 図にしてみる setbits(0x55, 4 , 3, 0xFF)を例にする…

バイナリエディタbvi入れてみた。

Vimのバイナリモードは激しく使いにくいので、viライクなバイナリエディタbvi入れてみた。BVI - Binary VIsual editorfedoraのパッケージには無かったので、ソースコンパイルした。 基本的な使い方 viライクです。 hjklで移動。 TAB移動が便利。 /,?で検索も…

VimでRand

Vim

Vimにrandがないっぽい。 function! Rand(n) exe 'ruby VIM::command("return #{rand(' . a:n . ')}")' endfunc :echo Rand(1000000000) 118960377returnまで書けちゃった・・・VIM::command強力過ぎる!!Rubyのrandもメルセンヌツイスタと強力。

はじめてのMrEd

図形言語に向けて、ちょっとGUIの勉強を。単体のMzSchemeではGUIが表示出来ないっぽいので、MrEd + MzSchemeなDrSchemeを使おうと思います。言語メニューからMrEdのあるScheme環境を選択してください。 線を引く MrEd単体だとかなり面倒なので、Teachpacksに…

MzSchemeでSRFIを使う。

SRFIという響きに憧れる。自称Schemeレベル2.8のtanakaです。Gaucheで、SIFIを使うには、 (use srfi-1) とする。しかし、僕はVimユーザーなのでMzSchemeなのです。 (require (lib "1.ss" "srfi")) なんとなく使えるようになった気がするので、使ってみます!!…

SICPを読む(51) 問題 2.24 - 2.28 リスト巡り

SICPネタを書くとアクセス数が激減することが判明。ブログで読者を逃すならSICPを読もう。 問題 2.24 まずは、括弧表現で、書いてみる。 (1 (2 (3 4))) 評価してみる。ドキドキ。 (list 1 (list 2 (list 3 4))) ; (1 (2 (3 4))) あってた。よく見ると、 (lis…

SICPを読む(50) 2.2.2(1) 階層構造

階層構造になったら、想像力が追い付かなくなってきた・・・。 ふたつのリストの違い (cons (list 1 2) (list 3 4)) ; ((1 2) 3 4) (list (list 1 2) (list 3 4)) ; ((1 2) (3 4)) あれ?何が違うんだ!?展開してみよう。 (cons (cons 1 (cons 2 `())) (cons 3…

SICPを読む(49) 問題 2.21 - 2.23 mapの問題を解こう。

サクサク進む。これくらいの問題が続いてくれると嬉しいんだけど・・・。 問題 2.21 穴埋め問題。 (define (square x) (* x x)) (define (square-list items) (if (null? items) `() (cons (square (car items)) (square-list (cdr items))))) (square-list …

SICPを読む(48) 2.2.1(3) map

とうとうmapが出てきた。mapは,perlやruby等にもある結構有名な関数。僕はforeachやeachを使っていたので、mapを使用することは殆ど無かった気がする。Schemeのmapを使うことで何かが変わるのだろうか? map (define (map proc items) (if (null? items) `() …