SICP 読み (381) 5.5 翻訳系

問題 5.51

先に eq? とか eqv? とか equal? を書くべきかどうか迷うな。とりあえず r5rs.pdf で仕様を確認したんですがワケワカ。rudimentary implementation ってコトで簡単な実装にニゲそうな予感。
とりあえずこれはもう少し gauche なオブジェクトをきちんと理解しないと書けないと判断。続きの試験を書こう。でもそろそろハードル高くなってきそうな予感。

FIXNUM

ええと、試験はこんなカンジ。微妙にザルっぽい。

#include <CUnit/CUnit.h>

#include "gauche.h"

void test_gauche_SCM_INTP(void)
{
  CU_ASSERT_FALSE(SCM_INTP(0));
  CU_ASSERT_TRUE(SCM_INTP(1));
  CU_ASSERT_FALSE(SCM_INTP(2));
  CU_ASSERT_FALSE(SCM_INTP(3));
  CU_ASSERT_FALSE(SCM_INTP(4));
  CU_ASSERT_TRUE(SCM_INTP(5));
}

void test_gauche_SCM_INT_VALUE(void)
{
  CU_ASSERT_EQUAL(0, SCM_INT_VALUE(1));
  CU_ASSERT_EQUAL(1, SCM_INT_VALUE(5));
}

void test_gauche_SCM_MAKE_INT(void)
{
  CU_ASSERT_TRUE(SCM_INTP(SCM_MAKE_INT(0)));
  CU_ASSERT_EQUAL(1, SCM_MAKE_INT(0));
}

今日はえらいバタバタしてるんで、日中は何もできなさそげ。次の CHARACTERS が終わったあたりからが佳境。
てーかヘッダから作るってよく考えたら微妙だなぁ。特にクラスのあたりはどういった発想で、という事が理解できてないと作れんよ。RHG みてみるか。

メモ

ScmClassRec 構造体の cpl というメンバ、意味不明だったのですが、gauche のリファレンスならセイフだろう、という事で確認。Class Precedence List (クラス順位リスト) というものらしい。

    struct ScmClassRec **cpl;

てコトはポインタ配列で保持しておるのでしょうか。なんか違うような気がするなぁ。ってーか多重継承云々とか面倒スギ。ぶっちゃけペアが実装できてりゃなんとかなるはずなのでこのあたりもスルーしてしまえ、になるのでしょうか。
む。上記の領域にスーパーなクラスのオブジェクトへのポインタが、ってそれじゃ単一継承だ。よく考えたら初等的な実装にクラスは不要。無茶はしない方向で。(何