演習3-3 K&R プログラミング言語C
演習3-3 #include <stdio.h> #define MAX 1024 void expand(char s1[], char s2[]); int main(int argc, char *argv[]) { char *str1 = "-c-h-r-b, a-z0-9"; char str2[MAX]; expand(str1, str2); pri…続きを読む
演習3-3 #include <stdio.h> #define MAX 1024 void expand(char s1[], char s2[]); int main(int argc, char *argv[]) { char *str1 = "-c-h-r-b, a-z0-9"; char str2[MAX]; expand(str1, str2); pri…続きを読む
演習3-2 改行、タブを \n、\t に変換する escape 関数 #include <stdio.h> #define MAX 1024 void escape(char *s, char *t); int main(int argc, char *argv[]) { int i, c; char s[MAX]; char t[MAX]; i = 0; while ((c = ge…続きを読む
最後のC言語での実装の2問が残っているけれども、一旦これで終了とする。 2008年の11月に開始したので約1年と1ヶ月ちょっとかかったことになる。 計算機プログラムの構造と解釈 posted with amazlet at 09.12.29 ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン ピアソンエデュケーション 売り上げランキング: 119177 Amazon.co.j…続きを読む
Processing.js で JavaScript を使って Drawing をしてみる。 processing.init.js をロードすることで type が application/processing の <script> タグの中に記述されたコードが Processing で実行できるようになる。 以下のコードのデモ <script src="./proce…続きを読む
問題5.50 4.1節の超循環評価器を compile-and-go させる。 primitive-procedures に必要な手続きを追加していく。 また、let が定義されていなかったので基本手続きに let を追加する。 レジスタ計算機シミュレータの make-new-machine は性能監視機能を追加したものを使った。 環境へ基本手続きを登録する際に map が上手く動作しなかったので…続きを読む
問題5.49 式を "読み込み(read-eval-print-loop)"、それを"翻訳(compile)"し、結果のコードを"アセンブリ(assemble)"して実行し、結果を"印字(print-result)"する。 (load "./register_machine.scm") (load …続きを読む
問題5.48 ;; 環境に compile-and-run を基本手続として追加する。 (define (setup-environment2) (extend-environment (list ‘compile-and-run) (list (list ‘primitive compile-and-run)) (setup-environment))) ;; setup-environment…続きを読む
問題5.47 元の翻訳系では翻訳した手続きが合成手続き(解釈される手続き)を呼び出せない。 $ gosh gosh> (load "./ece4compiler.scm") #t (compile-and-go ‘(begin (define (g x) (+ x 10)) (define (f x) (g x)))) (total-pushes = 0 max-dept…続きを読む
Fibonacci でのプッシュ回数、最大スタック深さを翻訳版、解釈版、特殊目的版で比較する。 プッシュ回数の比較 n 翻訳版 解釈版 特殊目的版 翻訳版と解釈版の比率 翻訳版と特殊目的版の比率 3 27 128 8 4.741 0.296 4 47 240 16 5.106 0.340 5 77 408 28 5.299 0.364 6 127 688 48 5.417 0.378 7 207 …続きを読む
演習3-1 元の binsearch と改良版 binsearch2 とで実行時間の差を比べる。 #include <stdio.h> #include <time.h> #define MAXSIZE 0x100000 int binsearch(int x, int v[], int n); int binsearch2(int x, int v[], int n); …続きを読む