2017-06-05 3 views
0

J'ai du mal à exécuter du code à partir du livre Real World OCaml. L'extrait de code est le github. En particulier, je reçois une erreur de type en ligne 6:OCaml Core List.Assoc.find

List.Assoc.find counts line

J'utilise 4.04.1 OCaml et selon utop, la signature de type de List.Assoc.find est:

('a, 'b) List.Assoc.t -> equal:('a -> 'a -> bool) -> 'a -> 'b option = <fun

Notez le paramètre non facultatif equal qui est manquant dans l'extrait de code ci-dessus. Mais, selon le dernier (en date de juin 2017) documentation pour List.Assoc.find, le paramètre equal est facultatif.

Quel est l'objectif du paramètre equal?

Répondre

3

La fonction regarde dans une liste pour trouver une paire dont le premier élément est égal à la valeur que vous donnez. Il renvoie Some (snd pair) ou None si aucun élément égal n'est trouvé. Le paramètre equal vous permet de spécifier une définition pour l'égalité au cas où vous ne voulez pas le = intégré.

Pour ce que ça vaut, j'utilise actuellement OCaml 4.03.0, et j'ai installé Core avec OPAM. Le paramètre equal est facultatif pour moi:

# List.Assoc.find;; 
- : ('a, 'b) Core.Std.List.Assoc.t -> 
    ?equal:('a -> 'a -> bool) -> 'a -> 'b option 
+1

Ce code fonctionne pour moi: 'nous assoc = [("un", 1); ("deux", 2); ("trois", 3)] ;; ' ' Liste.Assoc.find assoc "deux" ~ égal: (=) ;; ' –