En supposant que cette jolie imprimante va être un pp
: ex string →, voici un modèle:
fun pp (A i) = ...
| pp (B (ex1, ex2)) = ...
Ce modèle de modèle correspond à contre chaque constructeur de valeurs possibles pour le type ex. Les modèles vont un niveau de profondeur, donc pour votre valeur d'exemple, ex1
est lié à A 2
, et ex2
est lié à A 3
dans la première itération de l'appel. Vous voulez gérer ex1
et ex2
de manière récursive de la même manière que vous avez traité ex0
étant B (A 1, B (A 2, A 3))
.
Pour les chaînes concaténer, vous pourriez envisager op ^
: string × string → string ou String.concat
: liste de chaînes chaîne →:
- val test1 = "hello"^"world";
> val test1 = "helloworld" : string
- val test2 = String.concat [ "if ", "you've ", "got ", "many ", "strings!" ];
> val test2 = "if you've got many strings!" : string
Pour les entiers jolie impression, vous pouvez envisager Int.toString
: int → chaîne. Vous voudrez peut-être envelopper cette fonction, puisque Standard ML présente des entiers négatifs un peu funky:
- val test3 = Int.toString ~5;
> val test3 = "~5" : string
Pensez récursivement et pattern-matchingly. – molbdnilo