Inferno-limbo-data-type

limboでのData Typeについて

Primitive Type

int

符号あり 32-bit

big

符号あり 64-bit

real

64-bit IEEEの浮動小数点

byte

符号なし 8-bit

string

16-bit Unicode。

'c'は、intとして扱われます。一方、"c"はstringとなります。

c : string

c = 'C' これはまちがい

で、stringは、UNICODE(UTF-8)で保持されます。

この差は特にlengthに表れます。

'c'は32-bitだけど、"c"はUTF-8なので、1か2か3byteとなります。

Lists

以下のようにして、リストを宣言できる。後述のtupleと違って、全部同じ型で なければならない。

stringlist : list of string;
stringlist := list of {"hoge" , "blah"}; # 宣言と同時に値を入れる

:: 演算子

リストの先頭に値を付け加える

stringlist : list of string;
stringlist = "blah"::stringlist;
stringlist = "hoge"::stringlist;

hd 演算子

listの先頭を取る

test := hd stringlist;

tl 演算子

最初のひとつをのぞいて、のこり全てのリストの要素を返す。

test := tr stringlist;
strinlgist = tr stringlist;

Array

宣言方法

hoge: array of int;

hoge := array [] of {"huge" , "huga" , "fuge"}; <-宣言と同時に代入

Tuple

複数の値を持つ。

先述のlistと違って、違う型をもっていてもいい。

book := ("Inferno Programming with Limbo", "Phillip Stanley-Marbell",
59.99 , 2003);

ADT

C言語で言う構造体みたいなもの。

関数も中に入れることができます。

宣言

Person : adt
{
  year: int;
  name : string;
  age: fn(me : B) : int;
};

使用法

myself : Person; 

myself.age = 32;
myself.name = "ほげ";


B.age(me : B) : int;
{
  sys = load Sys Sys->PATH;
  daytime := load Daytime Daytime->PATH;

  return (daytime->year - me.year) ;
} # この実装がちゃんと動くかどうかは未確認


イテレータ

hd演算子とtl演算子をうまくつかうと、イテレータができる。