Problème avec une recursivité

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Je cherche à écrire une fonction qui retourne le dernier élément d'une liste en OCaml, d'après le premier exercice de cette page.

J'aboutis au même que celui proposé en solution, mais j'ai tout de même une erreur. Voici le code :

1
2
3
4
5
(** Returns a list's last element *)
let rec last l = function
    | [] -> None (* Empty list, no last element *)
    | [e] -> Some e (* One-element list, return it *)
    | _ :: r -> last r;; (* Longer list, recursive call *)

Et voici l'erreur que je me prends dans la figure :

1
2
Error: Expression has type 'a list -> 'a option
       but an expression was expected of type 'a option

ce qui me laisse penser que l'appel récursif à ma fonction last n'est pas résolu, mais je ne vois pas pourquoi… :(

EDIT : J'ai trouvé mon erreur. Il ne fallait pas que je spécifie d'argument à la fonction last. En revanche, je n'ai aucune idée pourquoi mon code ne fonctionnait pas…

Édité par Richou D. Degenne

Cette réponse a aidé l'auteur du sujet

L'utilisation du mot-clé function revient à faire fun x -> match x with (un match implicite sur un argument donc).
Quand tu écris let rec last l = function, tu as en fait let rec last = fun l -> fun x -> match x with. Tu as donc défini une fonction qui attend 2 arguments.

+2 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte