データ型とオブジェクト
Punyochi で扱うデータは全てオブジェクト型です.オブジェクトはデータであり,関数でもあります.
NutMeg の実装では,以下のようなオブジェクトがあります.
| オブジェクト | 例 | 備考 |
|---|---|---|
Int | 0, 1, 25 | 64bit 整数値を表すオブジェクトです. |
Real | 0.0, 5.8 | 64bit 浮動小数点数 (実数値) を表すオブジェクトです. |
String | "mochi" | 文字列を表すオブジェクトです. |
List | [1; 2; 3] | 配列を表すオブジェクトです. |
Root | Root | 基底オブジェクトです.全てのオブジェクトは Root を継承します. |
Punyochi はクラスベースではありません.オブジェクトの仕様を定義したクラスをインスタンス化する代わりに,親インスタンスを一段階継承することで新しいインスタンスを生成します.
例えば,12 は Int クラスのインスタンスではなく, Int オブジェクトを継承したシングルトンなオブジェクトです.
関数としてのオブジェクト
数値 ( Int および Real ) は関数としても作用します.数値を数値で呼び出すと,乗算が実行されます.
println(1 2 3 4 5); // 120
x = 6;
y = 7;
println(8x + 9y); // 111
文字列同士を呼び出すと結合演算が実行されます.
println("123" "456"); // 123456
空オブジェクト
空の () は何も存在しないことを表すオブジェクトです.他言語における null に似ていますが,() は他のオブジェクトと同様に Root を継承したオブジェクトです.Punyochi には null が存在しません.
x = ();
println x; // ()