2011-11-18 2 views
2

형식 변수를 무시하고 형식이 동일한 지 여부를 확인하는 함수를 작성하려고합니다 (SML의 올바른 용어인지 확실하지 않음). 이 함수는 여러 데이터 유형에서 작동하는 것이 바람직합니다.polyEqual없이 SML 사용자 지정 데이터 형식이 같음

그래서, 내가있는 경우 :

데이터 형식 D = A를 | int의 B;

myEqual A A, myEqual (B 1) (B 1)myEqual (B 1) (B 2) 모든 사실 반환하고, myEqual A (B 1)는 false를 반환합니다.

내 생각은 fun myEqual a b = a = b;과 같이 구현했습니다. 그러나 이것은 두 변수의 인스턴스 변수를 비교합니다. 이는 내가 원하지 않는 변수이므로 myEqual (B 1) (B 2)은 false를 반환합니다.

나는이 같은이 특정 데이터 유형에 대한 데이터

fun myEqual (B _) (B _) = true 
    | myEqual A A = true 
    | myEqual _ _ = false; 

그러나 이것은 단지 작품을 패턴 매칭을 사용하여이 경우에 구현 될 수 있다는 것을 알고있다.

SML에서 유형 평등 만 검사하지만 인스턴스 변수는 확인하지 않는 작업이 있습니까?

답변

4

우선 datatype D = A | B of int;은 두 개의 가지가있는 한 유형입니다. 그래서 당신이 비교하는 것은 다른 가지에서 다른 형태의 비교입니다. 같은 비교 함수를 작성하려면 데이터 유형을 분해해야한다고 생각합니다. 따라서 각 데이터 유형에 대해 myEqual 함수를 작성하는 것은 자연스러운 일입니다.

둘째, 두 개의 독립적 인 데이터 유형에 대해 이야기하고 싶다면 그런 종류의 비교가 필요하지 않습니다. SML은 정적이고 강력한 타이핑이기 때문에 컴파일 타임에 각 변수의 특정 유형을 알 수 있습니다.

+2

또는 요약하면 번호 : –

+0

SML은 그보다 더 강력한 보장을 제공합니다. 컴파일 타임에 항상 모든 표현식의 유형을 알고 있습니다. –

관련 문제