문제

"Point"유형의 요소를 반환하는 함수를 만들려고합니다.

type point = {x : int, y : int};
fun pointadd (p1: point, p2: point) = (((#x p1) + (#x p2)), ((#y p1) + (#y p2)));

하지만 smlnj 결과가 "포인트"유형이어야한다는 의도를 이해하지 못하는 것 같습니다.

use "test1.sml";
[opening test1.sml]
type point = {x:int, y:int}
val pointadd = fn : point * point -> int * int
도움이 되었습니까?

해결책

point 레코드 유형이지만 대신 튜플을 반환합니다.

이와 같은 것은 어떻습니까 :

fun pointadd (p1: point, p2: point) =
    { x = #x p1 + #x p2,
      y = #y p1 + #y p2 };

반환 유형에 유형 가드를 추가하여 유형을 더 멋지게 만들 수 있지만 동일합니다.

fun pointadd (p1: point, p2: point) : point =
    { x = #x p1 + #x p2,
      y = #y p1 + #y p2 };

다른 팁

SML 일 이후로 꽤 오래되었지만 유형 시그니처를 인쇄 할 때 유형 시스템이 정의 된 유형을 자동으로 해결하지 못합니다. 당신은 다음과 같은 것을 시도 할 수 있습니다 :

fun pointadd (p1: point, p2: point) = (((#x p1) + (#x p2)), ((#y p1) + (#y p2))): point
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top