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