문제

방금 SML로 시작했고 코드를 수정하려고 노력하고있어서 무엇을하고 있는지 이해합니다 (괜찮은 SML/NJ 디버거를 찾을 수는 없지만 별도의 질문입니다).

fun type_check e theta env non_gens = 
  case e of
   constant_int _ => (integer,theta) 
  | 
   constant_bool _ => (boolean,theta) 
  | ...

constant_int가 이미 선언 된 데이터 유형의 일부라고 생각하는 것은 이것이 유효한 코드라고 가정합니다. 나는 시도했다 :

...
constant_int _ => (print "returning integer") (integer,theta)
...

그러나 나는 얻는다 :

    stdIn:167.22-167.65 Error: operator is not a function [tycon mismatch]
      operator: unit
      in expression:
        (print "returning integer") (integer,theta)

나는 일련의 진술을 실행하는 방법을 이해하지 못한다고 생각합니다. 마지막은 반환 값으로 취급되어야합니다. 어떤 충고?

또한 내 자신의 데이터 유형 값을 어떻게 인쇄합니까? SML은 데이터 유형 값을 print ()에 전달하려고 할 때 마음에 들지 않았으므로 각 데이터 유형에 대한 새 인쇄 기능을 만들어야 할 것입니다. 맞습니까?

도움이 되었습니까?

해결책

세미콜론을 사용하여 "일련의 진술을 실행할 수 있으며 마지막 명령문 만 반환 값으로 취급해야합니다".

...
constant_int _ => ( print "returning integer"; (integer,theta) )
...

이 경우, 세미콜론은 사례 표현보다 우선 순위가 낮기 때문에 괄호 안에 일련의 진술을 감싸 야 할 필요가 있으므로 괄호가 없으면 세미콜론에서 사례 표현이 끝났다고 생각할 것입니다. , 전체 사례 발현은 시퀀스의 일부이며,이 경우에는 원하는 것이 아닙니다.

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