0

Existe-t-il un moyen de définir un type de données pour des nombres entiers. c'est-à-dire 0,1,2, ... pas zéro, un, ... individuellement.Types de données récursifs dans sml

Je veux définir l'ensemble des nombres entiers. bu en utilisant 0, n, n + 1 avec récursion. J'ai essayé quelque chose comme ceci: datatype nat = 0 | n | n + 1. Mais il était presque évident de ne pas travailler, car il ne reconnaît pas 0 comme entier droit?

J'apprécierais toute aide.

Répondre

3

Étant donné que l'ensemble des nombres naturels est infiniment dénombrable, vous ne pouvez pas énumérer tous les cas.

Vous pouvez représenter des nombres naturels sur le plan conceptuel par Peano numbers:

datatype peano = Zero | Succ of peano 

Le type de données est très simple, il ne définit que 0 et assure que chaque numéro naturel a un successeur. Par exemple, 2 est en réalité représenté par Succ (Succ Zero).

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

Utiliser des techniques similaires, vous pouvez construire add, sub, mult fonctions comme vous avez avec des nombres naturels.

+0

Oui, mais j'ai besoin d'utiliser un type de données qui utilise 0,1,2,3 et non succ (succ (succ (zer0))). Alors, est-ce que je peux prendre cela comme non, pas possible pour infini 0,1,2, ...? – 700resu

+0

Oui, vous avez raison. – pad

+0

@ user1710036 Pourquoi avez-vous besoin de cette représentation, si cela ne vous dérange pas? – waldrumpus

Questions connexes