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) でユーザーインタフェースはさくっと作って、ライブラリをロードするような場面を想定している。