昨晩の続き

とりあえず、read_internal() 手続きをもう少し確認。基本的に標準入力が読み込む形にしておいて読み込んだ情報を ScmObj にしてくれる模様。

  • 読み込みは基本的に skipws() 手続きを使ってコメントとか空白文字を skip している
  • 読み込んだ文字が
    • '(' ならリストの始まり
      • read_list() の戻りを return
    • '"' なら文字列の始まり
      • read_string() も戻りを return
    • '#' なら_様々な用途_な値の表現なのでもう一文字読み込んで処理
      • 詳細は略しますが、初等な実装という意味ではスルーな方針?
    • '\'' なら quote の始まり
      • read_quoted() の戻りを return
    • '`' も quote の始まり
    • ':'
    • ','
    • '|'
    • '['
    • '{'
    • '+' とか '-'
    • '.'
    • '0' から '9'
    • ')' とか ']' とか '}'
    • EOF
    • 上記以外
      • read_symbol() の戻りを return

例えばリストの始まりだった場合、read_list_int() を使って云々。read() はそのままパクれない気がしてるのでデグレード版 (って言い方悪いスね) を自分で書く必要ありそげ。
とは言え、この読み込みのあたり、gauche を使う身として何と言えば良いか感謝をもって見ざるを得ない、と言いますか。

今の課題

例えば以下な例で言えば

  (test (op self-evaluating?) (reg exp))

self-evaluating? の定義は以下で

(define (self-evaluating? exp)
  (cond ((number? exp) #t)
	((string? exp) #t)
	(else #f)))

これをどう定義するかな、って思ってたんですが number? とか string? とかの primitive な手続きが定義できてるのであれば C で書けるのか、という事に今更思い至っていたりしています。
ただ、上記のような簡単な手続きはまだ良いのですが、例えば lookup-variable-value のような手続きだと、どうしたものやら、というのが現状の課題ッス。