SML 기능 호출은 인수로 인수를 구문 분석하지 않습니다

StackOverflow https://stackoverflow.com/questions/759040

  •  09-09-2019
  •  | 
  •  

문제

SML 기능을 호출 할 때 우선 순위 문제인 것으로 보입니다. 대체 :

fun substitute v new (typevar q) = ...

그리고 나는 이것을 다른 기능에서 호출하고 있습니다.

fun new_type_vars (typevar v) non_gens = 
                   substitute v new_var() (typevar v)

하지만 오류가 발생합니다.

    C:/sml/type_checker.sml:22.48-23.44 Error: operator and operand don't agree [tycon mismatch]
      operator domain: type_exp
      operand:         unit -> string
      in expression:
        (substitute v) new_var

그것은 그것이 전화를 걸고 (대체 V)를 시도한 다음 해당 호출의 결과를 argument new_var와 함께 호출한다고 제안하는 것 같습니다.

나는 모든 주위에 괄호를 추가하려고 시도했지만 도움이되지 않으며 논쟁에 괄호를 추가 할 때 (v new_var...) V는 New_var의 함수 응용 프로그램이라고 생각합니다. 이 기능 호출로 무슨 일이 일어나고 있습니까?

도움이 되었습니까?

해결책

당신은 아마 변화하고 싶을 것입니다

substitute v new_var() (typevar v)

에게

substitute v (new_var()) (typevar v)

(Boutta의 답변은 이유를 설명합니다.)

다른 팁

모든 유형의 다른 작업과 변수를 제공하지 않기 때문에 모든 것을 이해하지 못합니다.

그러나 당신이 가진 일반적인 문제는 이미 추측 한대로 SML은 왼쪽에서 함수 호출 (변수 바인딩)을 실행합니다. 여기서 예 :

fun f a:int b:int c:string = ...

따라서 F는 int-> int-> string-> ... 유형의 함수이며 괄호를 암시 적으로 추가합니다 (((fa : int) b : int) c : int) = ...

이것은 예를 들어 다음과 같이 사용할 수 있음을 의미합니다.

var f2 = f 3;

그리고 f2는 이제 int-> string-> ... 유형을 가지고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top