1.5.2 文字のカウント, 1.5.3 行数のカウント, 1.5.4 単語のカウント, 演習1-8, 演習1-9, 演習1-10, 演習1-11, 演習1-12 K&R プログラミング言語C

1.5.2 文字のカウント
while や for ではループ本体に入る前にテストが行なわれる。
最初からテストに失敗した場合は本体は1度も実行されない。
1.5.3 行数のカウント
シングルクオートで囲まれた文字の内部表現を文字定数と呼ぶ。
文字定…

続きを読む

問題5.36 – SICP(計算機プログラムの構造と解釈)その287

問題5.36
コンパイラは右から左へと被演算子を評価していく。(5.5.3 組み合せの翻訳)
以下は (+ x y) をコンパイルした結果。
被演算子 y の探索が先にきている。
(env)
(env proc argl continue val)
(assign proc (op lookup-variable-value) (const +) (reg env))
(assign val (op lookup-variable-value) (const y) (reg env))
(assign argl (op list) (reg val))
(assign val (op lookup-variable-value) (const x) (reg env))
(assign argl (op cons) (reg val) (reg argl))
[...]…

続きを読む

1.1 手始めに, 1.2 変数と算術式, 1.3 For文, 1.4 記号定数, 1.5 文字入出力, 1.5.1 ファイルの複写, 演習1-2, 演習1-3, 演習1-4, 演習1-5, 演習1-6, 演習1-7 K&R プログラミング言語C

1.1 手始めに
プログラムには main 関数が必要。
演習1-2
#include <stdio.h>

int main(int argc, char *argv[])
{
printf("hello,\x\n");
return 0;
}

$ gcc -o ex1-2 ex1-2.c
ex1-2.c:13:12: error: \x used with no following hex digits

\x に続けて16進数値を記述しなければいけない。
#include <stdio.h>

int main(int argc, char *argv[])
{
printf("hello,\x61\n");
return 0;
}

16進数の 61 は10進数の 97 に相当する。
ASCIIコードの 97 は小文字の a に該当する。
$ ./ex1-2b
hello,a

1.2 変数と算術式…

続きを読む

neocomplcache の syntax_cache ファイルの書き込み不可エラー

なんか vim で *.c のファイルを作るたびにキーワード補完プラグインの neocomplcache のエラーが表示されるなと思ったら、 ~/.neocon/syntax_cache/ に作られた c= ファイルの所有者が root になっていて書き込みが出来なかったためだった。
所有者を変更したらエラーは発生しなく…

続きを読む

問題5.35 – SICP(計算機プログラムの構造と解釈)その286

問題5.35
(parse-compiled-code
(compile
‘(define (f x)
(+ x (g (+ x 2))))
‘val
‘next))

以下は、上記手続きをコンパイルしたもの。
(env)
(val)
(assign val (op make-compiled-procedure) (label entry1) (reg env))
(goto (label after-lambda2))
entry1
(assign env (op compiled-procedure-env) (reg proc))
(assign env (op extend-environment) (const [...]…

続きを読む

問題5.34 – SICP(計算機プログラムの構造と解釈)その285

問題5.34
こちらの反復的手続きの factorial では末尾再帰になっている。
一方こちらは再帰的手続きの factorial のコンパイル済みコード。
(env)
(val)
(assign val (op make-compiled-procedure) (label entry1) (reg env))
(goto (label after-lambda2))
entry1
(assign env (op compiled-procedure-env) (reg proc))
(assign env (op extend-environment) (const (n)) (reg argl) (reg env))
(assign val (op make-compiled-procedure) (label entry3) (reg env))
(goto (label after-lambda4))
entry3
(assign env (op compiled-procedure-env) (reg [...]…

続きを読む

問題5.33 – SICP(計算機プログラムの構造と解釈)その284

問題5.33
factorial と factorial-alt のコンパイル結果を以下に示す。
factorial
(env)
(val)
(assign val (op make-compiled-procedure) (label entry1) (reg env))
(goto (label after-lambda2))
entry1
(assign env (op compiled-procedure-env) (reg proc))
(assign env (op extend-environment) (const (n)) (reg argl) (reg env))
(save continue)
(save env)
(assign proc (op lookup-variable-value) (const =) (reg env))
(assign val (const 1))
[...]…

続きを読む

問題5.32 – SICP(計算機プログラムの構造と解釈)その283

問題5.32 a.
(define eceval
(make-machine
;; 省略
ev-application
(save continue)
(assign unev (op operands) (reg exp))
(assign exp (op operator) (reg exp))
[...]…

続きを読む

Linux でファイルパーミッションの変更

ファイルパーミッションの変更

読み込み(Read)
4
書き込み(Write)
2
実行(eXecute)
1

$ chmod mode file …

Linux でファイルパーミッションの変更
オーナーの変更
$ chown owner[:group] file …

グループの変更
$ chgrp group file …
$ chown :group file …

続きを読む

問題5.31 – SICP(計算機プログラムの構造と解釈)その282

問題5.31
よくわからないので、それぞれの場合のコンパイル結果を載せておく。
コンパイル結果の表示は以下の手続きで見易いように改行させる。
(define (parse-compiled-code lis)
(if (not (null? lis))
(begin
(if (pair? (caar lis))
(map (lambda (x)
[...]…

続きを読む
Page 1 of 41234»
↑ページの先頭へ