2009-06-02 3 views
2

this question 이후, 나는 무엇을 생각해야할지 모르겠다."**"가 OCaml의 부정보다 더 단단히 묶이지 않는 이유는 무엇입니까?

OCaml에서 -1.0 ** 2.0과 같은 작업을 수행하면 (입력이 필요하므로 float을 사용해야 함) 1.00을 얻습니다. standard order of operations에 따르면 결과는 -1이어야합니다 (Python에서와 같이).

나는 이유 또는 OCaml의에서 연산자 우선 순위에 대한 명확한 정의를 찾을 수 없습니다

...

이 때문에 타입 시스템의인가? 또는 pow 아래에 바인딩이 있다는 사실?

답변

1

연산자 우선 순위는 OCaml에서 구문 지향적입니다. 즉, 함수 식별자의 첫 번째 문자 (및 단항 또는 이진인지 여부)가 고정 시퀀스에 따라 연산자 우선 순위를 결정한다는 의미입니다. 이것을 Haskell 같은 언어와 비교해보십시오. Haskell에서는 함수 식별자를 구성하는 데 사용되는 문자에 관계없이 연산자 우선 순위를 함수 정의에 지정할 수 있습니다.

+1

이것은 항상 정확하지는 않으며 질문과 관련이 없습니다. 예를 들어 **는 같은 문자로 시작하더라도 *보다 우선 순위가 높습니다. 단항 마이너스는 동일한 문자를 사용하더라도 빼기보다 우선 순위가 높습니다. 실제로, OP의 문제는 단항 마이너스가 실제로 OCaml에서 곱셈과 지수 연산보다 우선 순위가 높다는 것입니다. 단항 마이너스가 빼기와 같은 우선 순위를 갖는다 고 가정하면 도착할 수 없습니다. – newacct

+0

OCaml 매뉴얼의 섹션 6.7에는 연산자 우선 순위 테이블이 있습니다. 모든 이진 연산자는 단항 연산자보다 낮은 우선 순위를 갖습니다 (레코드, 배열 및 문자열 프로젝션 이진 연산자 제외). 산술 연산의 표준 순서를 얻고 프로그래머가 자신의 연산자를 정의 할 수 있도록하기 위해 OCaml은 가지고 있지 않은 몇 가지 추가 언어 기능이 필요하며 연산자는 더 이상 구문 지향적이지 않습니다. –

5

인용 한 바로 그 페이지에서 "단항 연산자 - (일반적으로"빼기 "를 읽는) 순서는 종종 문제가됩니다." - Excel과 bc를 O'CAML과 동일한 우선 순위로 인용하지만, "서면 또는 인쇄 된 수학에서는"그것은 Python에서와 같이 작동합니다. 근본적으로,이 특정 문제에 대한 공통의 합의가 없습니다.

관련 문제