2011-02-01 5 views
1

Operator Precedence 테이블을 보면, 람다 표현식이이 모든 것에 적합한 지 혼란 스럽습니다. 테이블 1 ~ 25 (가장 높은 우선 순위부터 가장 낮은 우선 순위)에 번호 매기기를하면 람다 식 구성에 사용되는 두 개의 주요 토큰을 볼 수 있습니다. 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 인 경우에만 (실제로는 올바른 연관성이 있음) ...) 어떤 것도 상상해 보라. 이 질문 또는 어떤 followup든지에 ying 응답. F #에 대한 파서/컴파일러를 직접 작성하지 않는 한 이것에 관심이 없어야합니다. 이것들은 당신이 찾고있는 드로이드가 아닙니다.)

+0

하하, 나는 테이블이 좋지 않다는 것을 알고있었습니다. (그리고 스펙은 훨씬 도움이되지 않습니다)! 하지만 시퀀스 연산자를 사용하고 우선 순위 규칙을 자세히 이해하는 데는 매우 좋은 이유가 있습니다. F # 파서 도움을 전혀 보지 않거나 fslex/fsyacc에 익숙하지 않은 누군가가 완전히 잃어 버렸을까요? 우선 순위 규칙을 파악하기위한 다른 제안 사항이 있습니까? 감사! –

+0

또한 "MU"가 무엇을 의미하는지 모르겠습니다. –

+0

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

관련 문제