renvoie le nième élément d'une liste en OCaml?
Je suis nouveau sur Ocaml, je veux juste vous assurez-vous que la façon d'effectuer une simple fonction telle que renvoie le nième élément d'une liste en utilisant une fonction récursive?
Prototype comme get_nth (list, n)
avec int list * int -> int
par exemple get_nth ([1,2,3], 1) -> 2
Merci
Cela sonne vraiment comme un problème. Il serait utile si vous a montré un peu de code que vous avez essayé cela ne fonctionne pas comme vous l'espériez.
OriginalL'auteur Allan Jiang | 2012-03-20
Vous devez vous connecter pour publier un commentaire.
Vous pouvez ne pas remarquer mais
List.nth
fonction est déjà là, dans Liste de module.Si vous souhaitez écrire à l'aide de la récursivité:
OriginalL'auteur pad
Aide de n-uplets en tant que paramètres comme ce n'est pas commun en OCaml. Habituellement, vous devez utiliser nourrissage et de définir votre fonction comme ceci:
Ce serait la signature
'a list -> int -> 'a
. Notez également que vous avez une'a
paramètre ici, ce qui signifie, il n'y a pas vraiment de raison de restreindre votre fonction à ints seul.Examinons maintenant le problème. Si vous voulez obtenir le zéro de l'élément, quel serait votre fonction?
maintenant, si vous avez une fonction pour obtenir le n-ième élément d'une liste de m éléments (N. B. n > m), comment pourriez-vous utiliser cette fonction pour construire une autre fonction qui est la n+1er élément à partir d'une liste de m+1 éléments? Laissez fonction de n+1 éléments
get_nth'
Maintenant, tout ce que vous devez faire est de combiner les deux et vous avez terminé. Je vais laisser cette dernière partie jusqu'à vous.
Si vous suivez ce conseil, vous obtiendrez quelque chose qui est plus compliqué, qu'il doit être. Cependant, il est plus facile de comprendre ce qui se passe de cette façon.
OriginalL'auteur LiKao
(À mon avis) Une solution plus simple sans l'aide d'un n-uplet peut être:
OriginalL'auteur Omar
J'ai lu ici que l'utilisation de
Result
au lieu de déclencher d'erreur peut être plus agréable puisque vous n'avez pas à utiliser untry ... with
. (Code modifié à partir d' @Omar Mahili)Result
fait partie deCore.Std
, si je suis correct.OriginalL'auteur Pie 'Oh' Pah