どこからどこまでが引数なのでしょうか
次は関数呼び出し。
括弧が不要ですので、引数がひとつだけのときは順番に係っていくので明白ですが、引数がふたつ以上あるときの係り受けがどうなっているのかは当然の疑問でしょう。
>> join join "abc" "def" "ghi" == "abcdefghi"
簡単に言えば正ポーランド記法ですね。引数が足りないとエラーになります。
とても大事なことに思えるのですが、マニュアルで登場するのはFunctionの項です。
優先順位は中置記法扱いのものが前置記法よりも強いというだけです。
どうせなら中途半端に引数を渡した状態をも値としてくれたら、カリー化とかできたり、逆FORTHの趣が出たりして面白かったと思うのです、が、引数の不足をエラーにしないと式が一意にならないですね。
>> 1 2 == 2
ふたつの式を並べた場合、前の値は捨てられます。セミコロン等は無し。
コードが単なるデータブロックかつS式と異なり先頭要素に特別を持たせないとすると、こうなるのは当たり前のような気もしますが、これがぱっと見で規則がわからなかった理由かも…。
関数にはrefinementなるオプションをつけることができます。
>> sine 180 / 2 == 1 >> sine/radians pi / 2 == 1 >> pi == 3.14159265358979
デフォルトがdegreeであることよりも、sinではなくてsineであることに違和感が…。コサインもcosine、タンジェントもtangentです。sinは略記であって、本当はこちらが正しいのでしょうね。正直これが本日最大のカルチャーショック。
>> (square-root 2) ** 2 == 2 >> power (square-root 2) 2 == 2 >> (power (square-root 2) 2) - 2 == 4.44089209850063E-16
中置演算子と同機能の、通常の関数名がつけられた版もあります。
精度は倍精度(double)の様子。これはもうMSのコンパイラが拡張精度(extended)を扱わない以上仕方ないのかな…。BorlandもDigitalMarsもlong doubleは拡張精度なのに…。
現実には必須のatan2も無かったり、数学関連は微妙に不満。