Pensez à ce que votre fonction doit faire: étant donné une limite, vous devez créer un liste des nombres. Donc, votre type est quelque chose comme carDoorNumbers : int -> int list
. En regardant cela, il semble que vous ayez deux erreurs. Tout d'abord, vous faites correspondre limit
(qui devrait être un int
) contre un modèle de liste. [1] -> ...
correspond à une liste contenant uniquement l'élément 1
et []
correspond à la liste vide; vous voulez vraiment faire correspondre contre le numéro 1
et tout autre nombre n
.
La deuxième erreur est que vous renvoyez deux types différents dans votre instruction match
. Rappelez-vous que vous êtes censé rendre une liste. Dans le premier cas, vous renvoyez Random.int 3
, qui correspond à int
plutôt qu'à int list
. Ce que vous voulez vraiment revenir ici est quelque chose comme [Random.int 3]
.
L'erreur que vous avez est un peu déroutant. Depuis la première chose que vous avez retourné était un int
, il attend votre deuxième chose à aussi être un int
. Cependant, votre deuxième cas était réellement correct: vous faire retourner un int list
! Cependant, le compilateur ne sait pas ce que vous vouliez dire, donc son erreur est en arrière; plutôt que de changer le int list
en int
, vous devez remplacer le int
par un int list
.
D'accord, cela a du sens. Pour mon deuxième cas, au lieu de comparer à une liste vide [], comment pourrais-je l'utiliser pour toutes les autres possibilités de limite (je suppose que c'est un pos #)? –
L'argument est un nombre. Vous voulez faire correspondre * tout * nombre (sauf 1, mais cela correspond à la casse précédente).Vous pouvez le faire avec le motif le plus simple 'n', qui correspond à n'importe quoi et le lie à la variable' n'. (Vous pouvez naturellement nommer la variable que vous voulez.) –