パース結果を見る
メッセージオブジェクトを見るとパース結果がわかる
f := method(call message argAt(0))
上記の関数を使っていろいろ試した結果。
Io> f(x+y) ==> x +(y) Io> f(x+y) name //xを取り出す ==> x Io> f(x+y) next ==> +(y) Io> f(x+y) next name //+を取り出す ==> + Io> f(x+y) next argAt(0) //yを取り出す ==> y Io> f(x+y*z) //ちゃんと優先順位がある ==> x +(y *(z)) Io> f(x*y+z) ==> x *(y) +(z) Io> f(x:=y) //メソッドに変換される例 ==> setSlot("x", y) Io> f(x=y) ==> updateSlot("x", y) Io> f(x[y]) ==> x squareBrackets(y) Io> f(x{y}) ==> x curlyBrackets(y) Io> f(x:y) //ひとつながりの名前と解釈 ==> x:y Io> f(x:y) name ==> x:y Io> f(x:y) next ==> nil Io> f(x :y) //引数無しメソッドのチェインと解釈 ==> x : y Io> f(x :y) name ==> x Io> f(x :y) next ==> : y Io> f(x :y) next next ==> y Io> f(x :(y)) //:を演算子(メソッド)として解釈 ==> x :(y) Io> f(x :(y)) next ==> :(y) Io> f(x :(y)) next name ==> : Io> f(x :(y)) next argAt(0) ==> y Io> f(x:(y)) //x:という関数の呼び出しと解釈 ==> x:(y) Io> f(x:(y)) name ==> x: Io> f(x:(y)) next ==> nil
Operator ::= { ":" | "." | "'" | "~" | "!" | "@" | "$" | "%" | "^" | "&" | "*" | "-" | "+" | "/" | "=" | "{" | "}" | "[" | "]" | "|" | "\" | "<" | ">" | "?" }
http://iolanguage.com/scm/git/checkout/Io/docs/IoGuide.html#Appendix-Grammar
演算子とは、単に英数字以外の文字による名前をもつメソッドである。例外として、":"(コロン), "_"(アンダースコア), '"'(ダブルクォート), "."(ドット) は演算子に使えず、また次のものは英数字による名前だが演算子とする: "and", "or", "return".
http://f21.aaa.livedoor.jp/~kizz/prog/io/_docs/IoProgrammingGuide_ja_only.html#Language