C言語からS式をGaucheに投げてを評価させる(Eval_CString)


Gauche/Scheme

C言語からS式をGaucheに投げてを評価させる(Eval_CString)

このサンプルでは、S式を評価した内容を受け取ることはできていない。

単に”S式を評価させる”ということだけできているもの。

サンプルソースでは、

	(print (+ 1 1))

というS式をGaucheのライブラリで評価させている。

その結果、標準出力に所望の'2'という結果が表示された。

とりあえず、ソース

sample.c

	#include <gauche.h>
	int main(int argc, char **argv) {
	
	  //GC_INIT(); 
	
	  Scm_Init(GAUCHE_SIGNATURE); 
	
	  //Scm_EvalCString("(print (+ 1 1))", SCM_OBJ(Scm_UserModule()));
	  Scm_EvalCString("(print (+ 1 1))", SCM_NIL); //このサンプルでは、これで十分
	
	  Scm_Exit(0);
	
	  return 0;
	}

コンパイル、実行

see below

C言語からGaucheのライブラリを使う、はじめの一歩 on Dream Linux(Debian)

コンパイル

	> gcc sample.c -I/usr/local/lib/gauche/0.8.14/include -lgauche

実行

	> ./a.out
	2

メモ

CGはとりあえず、初期化しなくても動いた。 (ほんとは初期化したほうが良いだろう)

今回のサンプルは、最大限のミニマムと思う。

ちなみに、動作は以下のコマンドと等価(いや、大体同じ)。

	> gosh -E"(print (+ 1 1))" -eExit
	2
	>

Eval_CStringというGaucheのライブラリの関数は、 char*型で渡されたS式を内部で評価するもの。

その関数自体は、評価が成功すると0(以上)を戻り値として返す。

そして、いよいよ Gaucheの評価結果をchar*型で取ってくる(ScmEvalPacket)

参考

gauche.hのpre-command処理部分

Gaucheユーザーリファレンス(3.1Gaucheを起動する/コマンドラインオプション)