7
votes

Fonctions de correspondance de motif dans OCAML

Est-ce que tout le monde peut m'expliquer cette pièce de code?

let safe_division n = function
| 0 -> failwith "divide by 0"
| m -> n / m


0 commentaires

4 Réponses :


7
votes
function
| 0 -> failwith "divide by 0"
| m -> n / m

0 commentaires

10
votes

Lorsque vous exécutez Safe_Division 3 0 , tout d'abord, 3 est lié au nom n et le côté droit de la déclaration est puis évalué.

Ceci est une fonction , donc l'argument suivant, 0 est apparié contre les différents cas, dans l'ordre. Ici, il correspond au premier cas, de sorte que le côté droit est évalué et une exception est lancée. Dans ce cas, le nom m n'est jamais lié à rien.

Si le deuxième argument était, par exemple, 1 , il aurait alors correspondre le second cas (ce cas correspond à toutes les valeurs possibles de toute façon, c'est un cas par défaut), liant le nom M à la valeur 1 puis renvoyé le résultat de n / m .


0 commentaires

11
votes

Il est facile de voir ce que cela signifie une fois que vous réalisez que

let safe_division = function n -> function
                                  | 0 -> failwith "divide by 0"
                                  | m -> n / m


0 commentaires

1
votes
let safe_division n = fun x -> match x with
| 0 -> failwith "divide by 0"
| m -> n / m

0 commentaires