2017-02-11 5 views
0

Ich versuche, eine Funktion zu schreiben, die eine Liste analysiert und eine neue Liste erstellt, die die gewünschten Wörter in diesen Fallnamen enthält.Ocaml-Operatoren in anonymen Funktionen

kann ich die Funktion für einen Namen geschrieben z

let extract_name (lst : string list) : string list = 
List.filter (fun x -> x = "George") (lst) 

Wenn ich versuche, und schreiben Sie es für mehr als einen Namen ich Fehler bekommen. Ich habe die Klammern ein paar Mal neu angeordnet, aber ich bekomme immer noch Fehler.

let extract_name (lst : string list) : string list = 
List.filter (fun x -> x = ("George" || "Victoria")) (lst) 

Fehler

let extract_name (lst : string list) : string list = 
List.filter (fun x -> x = "George" || "Victoria") (lst) 
;; 
Characters 93-103: 
List.filter (fun x -> x = "George" || "Victoria") (lst) 
             ^^^^^^^^^^ 
Error: This expression has type string but an expression was expecte of type bool 
# let extract_name (lst : string list) : string list = 
List.filter (fun x -> x = ("George" || "Victoria")) (lst);; 
Characters 82-90: 
List.filter (fun x -> x = ("George" || "Victoria")) (lst);; 
          ^^^^^^^^ 
Error: This expression has type string but an expression was expected  of type bool 

Wie kann ich dieses Problem lösen?

Antwort

3

Sie versuchen, den booleschen Operator || auf zwei Strings hier zu verwenden, was nicht funktioniert und den Typfehler verursacht. Sie müssen die Gleichheit mit x für beide Strings separat, testen und dann oder das Ergebnis:

List.filter (fun x -> (x = "George") || (x = "Victoria")) lst 
+0

was ist, wenn Sie es auf die Werte in einer Liste vergleichen wollen? – Tank

+0

Dann verwenden Sie etwas wie ['Spaß x -> List.mem x [" George "," Victoria "]'] (https://caml.inria.fr/pub/docs/manual-ocaml/libref/List.html #VALmem) – Bergi

Verwandte Themen