2011-02-01 17 views
1

Operator Precedenceテーブルを見ると、ラムダ式がこのすべてに適合するところで混乱します。テーブル1〜25に番号を付けると、ラムダ式を構成するために使用される2つのキートークンが表示されます。funは非結合6、->は右結合8です。つまり、fun ... -> ...です。これは、ラムダ式(->の右辺)の本体で優先順位が役割を果たすかどうかわからないので、これは私が最初に理解している間違いかもしれません。私は、優先順位が表現全体で役割を果たすと考えることができます。私はそこに移動します。この表によれば、シーケンス演算子;fun "演算子"よりも優先度が低く、4です。これは、私は信じてはラムダ式の優先順位を理解するのに役立ちます

fun (x:int) -> x + 3 ; 2;; 

((fun (x:int) -> (x + 3)) ; 2);; 

と同等である必要があり、まだそれは実際に私はによって与えられた優先のルールの私の解釈を明確に任意の助けに感謝

(fun (x:int) -> (x + 3 ; 2));; 

と等価であることを述べています参照されるテーブルとラムダ式の優先順位の実際のルールありがとう!

答えて

4

MU

(あなたは演算子の優先順位表を読んでいるなら、あなたはすでに失ってしまった。表には、おそらくバグを持っていますが、気に誰が、テーブルを読んでいない。そして、シーケンス演算子を使用していません(;)そしてラムダの隣にあるシーケンス演算子を使うならば、ラムダをかっこに入れてください、あるいはすべてのラムダをかっこに入れてください。私はF#パーサーのコードをいつも触れています。 ;fun->の相対的な優先順位は、->の意味がわからない(式ではnot an operatorである(実際には右結合型である)...私はできません任意のものを想像するこの質問または任意のフォローアップへの答えを教えてください。 F#用の独自のパーサー/コンパイラを作成している場合を除き、これに関心はないはずです。これらはあなたが探しているドロイドではありません。)

+0

私はテーブルが良くないことを知っていました(そしてスペックはあまり役に立たないです)!しかし、私は、シーケンス演算子の使用と優先ルールの深い理解の両方を得るための非常に良い理由があります。 F#パーサの助けを借りてみるか、fslex/fsyaccに慣れていない人は、まったく失われるでしょうか?優先ルールを把握するための他の提案はありますか?ありがとう! –

+0

また、「MU」の略語はわかりません! –

+0

http://en.wikipedia.org/wiki/Mu_(negative) – Brian

関連する問題