Gauche を C プログラムから使う
libgauche をリンクすればできるみたい。http://www.practical-scheme.net/wiliki/wiliki.cgi?Gauche%3AYAGHG%3AIntroduction を参考に、外部の scheme コードをロードして結果を表示するプログラムを書いてみた。
main.c で同じディレクトリにある test.scm をロードして、関数 test を評価。結果は
/* main.c */ #include <stdio.h> #include <gauche.h> ScmObj test() { Scm_Load("./test", 0); ScmObj expr = Scm_ReadFromCString("(test)"); return Scm_Eval(expr, SCM_OBJ(Scm_UserModule())); } int main() { GC_INIT(); Scm_Init(GAUCHE_SIGNATURE); ScmObj result = test(); printf("%d?n", SCM_INT_VALUE(result)); Scm_Exit(0); return 0; }
ロードされる test.scm はこれだけ。
;;; test.scm (define (test) (+ 1 2))
最後にとりあえずの Makefile。
INCLUDE = -I/opt/local/lib/gauche/0.8.6/include LIBS = -lpthread -lm -lgauche LIBDIR = -L'/opt/local/lib/gauche/0.8.6/powerpc-apple-darwin8.3.0' -L/opt/local/lib main: main.c cc $(INCLUDE) $(LIBDIR) $(LIBS) -o $@ $<
make して実行。
$ ./main 3
Gauche でモデルは素早く楽して作ってライブラリにしておいて、Cocoa (Objective-C) でユーザーインタフェースはさくっと作って、ライブラリをロードするような場面を想定している。