2017-02-19 3 views
1

Ich bin neu in OCaml und versuche, eine Wortanzahl aus einer Liste von Wörtern zu erstellen. Für jedes Wort, ich versuche, dies zu tun:Prüfen, ob ein Wort in Ocaml existiert StringMap

let check x = if StringMap.mem x then y = StringMap.find x testMap (* I want to add one to this value *) 
else 
let testMap = StringMap.add x 1 testMap ;; 

von Apart Fehler in diesem Code bekommen, ich bin ziemlich sicher, dass ich die Logik ein wenig bekommen haben auch falsch. Ich bin neu in der funktionalen Programmierung, also wäre jede Hilfe großartig.

Antwort

1

StringMap.add ist eine neue Karte; Die ursprüngliche Karte ist unberührt.

Um Fortschritte zu erzielen, müssen Sie den aktuellen Wert der Karte verfolgen.

Eine Möglichkeit für check ist

let check : string -> StringMap.t -> StringMap.t 
= fun string map -> 
    if StringMap.mem string map 
    then let y = StringMap.find string map in 
    (* do something with y *) 
    else (* add a binding between string and 1 *) 

, wo Sie die beiden kommentierten Teile vervollständigen müssen.