開発環境
- OS X Yosemite - Apple, Ubuntu (OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- C (プログラミング言語)
- Clang/LLVM (コンパイラ, Xcode - Apple)
Schemeの処理系(解釈系、評価器、レジスタ計算機を翻訳した命令列中心のより、もう少しC言語の特性を使った書き方をしたもの(label, gotoではなく、関数を呼び出すとか))を少しずつ書き進めてめていくことに。
Land of Schemeで外部プログラム、コマンド、スクリプト等を実行するために必要になった、system 手続きを実装。(C言語の system 関数の機能と似たような機能、仕様には無いぽかった(?)。C言語の standard library の system 関数をそのまま利用。いずれ必要になったら(入力文字列を受け付けたりして、 system 関数だとセキュリティ上好ましくない場合等)、その時に、exec 関数等も追加実装。)
参考書籍等
- 計算機プログラムの構造と解釈[第2版]
- Structure and Interpretation of Computer Programs (原書)
- R7RSHomePage – Scheme Working Groups
- Head First C ―頭とからだで覚えるCの基本
- 21st Century C: C Tips from the New School
- プログラミング言語C 第2版 ANSI規格準拠
- プログラミング言語Cアンサー・ブック 第2版
- C実践プログラミング 第3版
kscheme
コード(BBEdit, Emacs)
system.c
#include "system.h"
#include <stdlib.h>
#include "list_operations.h"
data_s prim_system(data_s in) {
data_s out;
int n = system(car(in).data.str);
if (n) {
out = data_s_new(Z, "-1");
} else {
out = data_s_new(Z, "0");
}
return out;
}
入出力結果(Terminal(kscm), REPL(Read, Eval, Print, Loop))
$ kscheme kscm> (system "echo Hello world!") Hello world! 0 kscm> $
0 コメント:
コメントを投稿