データ型

「萌香」には以下のデータ型があります。

「萌香」での数は全て浮動小数点数です。(RubyのFloatと全く同じ というかRubyのFloatにより実装されています。

現在は整数は実装されていません。

文字列

ダブルクォーテーションで囲まれたものは文字列として扱われます。 エスケープの処理をしていないため、文字列中にダブルクォーテーションを 含めることはできません。また\nや\t等も動かないと思います。

真偽値

真を'#t'、偽を'#f'と表わします。

「萌香」ではif文等の判定で偽でないものは全て真として扱っています。 空リストですら真です。

コンスセル

car部とcdr部を持つコンスセルです。

「萌香」では「.」(ドット)を使い以下のように表記します。

      (car部 . cdr部)
    

コンスセルをcdr部で継いだものをリストと呼びます。

      (x1 . (x2 . (x3 . x4)))
    

ドットと開き括弧は省略することができ以下のように表記できます。

      (x1 . (x2 . (x3 . x4)))  --> (x1 x2 x3 . x4)
    

最後のcdr部が空括弧の場合以下のように表記できます。

      (x1 . (x2 . (x3 . ()))) --> (x1 x2 x3)
    

最後が空括弧で終端されているリストをproper list、 そうでなくドットで終っているものをimproper listと呼びます。 コンスセル一つで以下のようになっているものを特にドット対と 呼びます。

      ( x . y )
    

クロージャ

手続きとそこで使用されるデータを含めてクロージャと呼びます。 C等の言語の関数やメソッドはクロージャからデータを除いたものです。

クロージャはlambda式によって生成され、組み込み関数と同様に 使用できます。