0

정수에 대한 데이터 유형을 정의하는 방법이 있습니까? 즉, 0,1,2, ... 0이 아닌, 1, ... 개별적으로.재귀 적 데이터 유형 sml

일련의 정수를 정의하고 싶습니다. 0, n, n + 1을 재귀와 함께 사용하는 부. 나는 다음과 같은 것을 시도했다 : datatype nat = 0 | n | n + 1. 하지만 0을 정수로 인식하지 못하기 때문에 작동하지 않는 것이 거의 확실합니다.

어떤 도움을 주셔서 감사합니다.

답변

3

자연수의 수는 무한대이므로 모든 사례를 열거 할 수 없습니다.

당신은 Peano numbers에 의해 개념적으로 자연수를 나타낼 수

datatype peano = Zero | Succ of peano 

데이터 유형은 매우 간단합니다, 그것은 단지 0를 정의하고 각 자연수 후임이 있는지 확인합니다. 예를 들어 2는 실제로는 Succ (Succ Zero)으로 표시됩니다. 당신은 자연의 숫자가 같은

fun count Zero = 0 
    | count (Succ p) = 1 + count p 

를 사용하여 유사한 기술, 당신은 add, sub, mult 기능을 구축 할 수 있습니다.

+0

예,하지만 0,1,2,3을 사용하고 succ (succ (succ (zer0))가 아닌 데이터 유형을 사용해야합니다. 나는 그것을 0으로 할 수 있습니까? 0,1,2 무한대에는 불가능합니다 ...? – 700resu

+0

네, 맞습니다. – pad

+0

@ user1710036 내 질문에 신경 쓰지 않는다면 왜 그런 표현이 필요한가요? – waldrumpus