順番むちゃくちゃFactor入門。予告も無視で今回はリテラルのいろいろ。これ調べていて気付いたこと: 前のエントリで書いたconventionsには出てこなかったですが、"foo:"は、parsing wordみたいですね。

数値

ふつうの整数、integer

1
-10
12345

分数、ratio。符号が分母・分子につくことあり。空白はあけない(Forthの子孫だし)

1/2
+2/5
-1/-2

ふつうに、2/5とかやってもratioが出てくる。

浮動小数点float。

1.25
-3.14
1.5e5

複素数complex。

C{ 1 2 }

word

wordのliteralは、\(バックスラッシュ)に続けてwordを書きます。

\ +

これだと、加算は実行されずに、word "+"がスタックに積まれます。そこでexecuteすると実行されます。この"\"はparsing word。スタックを消費するんじゃなくて、つづくソースコードをパーズするタイプのwordです。

quotation

quatationの表記もliteral。

[ 3 2 * ]

これ、対話形式で途中で改行いれてもいいんですよね。"["はparsing wordだからな

array

配列

{ 1 2 3 }

文字・文字列

文字リテラルはない。文字コードを扱うことはできる。CHAR: につづけての指定で文字コードをスタックにつめる。unicodeのコードポイントもかけます。

CHAR: x
CHAR: exclamation-mark

文字列リテラルはふつうにダブルクオートで囲む。stringオブジェクトは長さ固定。

"moji retsu"

sequences

Byte Array バイト列。ところでFactorには"protocol"という概念があるようで、これは"sequence protocol"を実装しています。そういえば文字列もsequenceです。

B{ 1 2 3 }

Vector。可変長sequenceだそうです。詳細はまだ理解していません。

V{ 1 2 3 }

String buffer。可変長の文字sequence。

SBUF" hello!"

SBUF"のあとにはスペースをあける必要あり。

Hashtable。ふつうの連想配列。

H{ { "name" "kojima" } { "web" "skoji.jp" } }

Tuple

Factorの名前つきslotを持っているオブジェクト。

T{ rgba { red 1.0 } { green 0.0 } { blue 0.5 } }

pathname

パス名。なぜstringと別に用意されているのかはまだ分かってません。

P" foobar.txt"

まとめ

超駆け足ですが、リテラルのいろいろでした。データ型としてよく分からないものもまだあります。parsing wordとかsequenceとかprotocolって概念も近々ちゃんと調べて書きます。