Factorに入門する(4) リテラル
順番むちゃくちゃ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って概念も近々ちゃんと調べて書きます。