C言語からGaucheを使おう! (6) Scm_Applyで手続きを呼び出す

こんにちは、鈴木です。

 

「C言語からGaucheを使おう!」シリーズです。

前回の「C言語からGaucheを使おう! (5) Scm_Evalでevalする」では eval する方法を調べました。

今回は Scheme の apply 手続き相当の処理を行う方法を調べます。

 

Scm_Apply 関数

以下の Scheme プログラムに相当する処理を行ないたいと思います。

サンプルコードです。

処理ごとにコメントを付けました。

(1) では、前回までに登場した Scm_EvalCString を用いて、値を 2 乗する square という手続きを定義しています。

(2) は初めての関数 Scm_GlobalVariableRef が登場しました。この関数は、名前からしてグローバル変数の参照を取得するもののようです。

(3) では Scm_Apply 関数を用いて「(apply square '(10))」相当の処理を行なっています。エラーハンドリングは Scm_Eval などと同様です。

(4) では結果を取得して、表示しています。

それでは実行してみましょう。(※「C言語からGaucheを使おう! (1) コンパイル環境を整える」で作成した Makefile を使用します)

期待通り「100」という結果が得られました。

 

まとめ

今回のポイントは、Scm_Apply の第一引数にはシンボルではなく Scm_GlobalVariableRef で取得した参照を渡す点でしょうか。

次回はいよいよ、Scheme プログラムを load する方法を調べようと思います。

 

Comments are closed, but you can leave a trackback: Trackback URL.

Comments

  • とおりすがり  On 2013年9月21日 at 21:35

    squareに渡している引数が10じゃなくて3になっています。

    • 鈴木 圭  On 2013年9月23日 at 11:49

      ありがとうございます!
      間違っていた箇所を修正しました。