2016-05-31 9 views
3

funktioniert kann ich nicht verstehen, warum die folgende Funktion mit zwei Argumenten funktioniert auch, wenn wir es mit einem param erklären:Warum ein Parameter Ocaml Funktion mit zwei Argumenten

let rec removeFromList e = function 
    h :: t -> if h=e then h 
      else h :: removeFromList e t 
    | _ -> [];; 

removeFromList 1 [1;2;3];; 
+0

** (1) ** Die Funktion 'removeFromList' gewonnen 't kompilieren, es sei denn, es ist in einem Kontext eingeschlossen, der eine andere Definition von 'removeFromList' enthält. Ich glaube, die Absicht war, es so zu definieren, "lass rec removeFromList ...". ** (2) ** Der Compiler sollte sich über den fehlenden '[]' case im Body der Funktion beschweren. –

+0

danke, ich habe es falsch geschrieben; jetzt editiert, sollte es in Ordnung sein –

+0

* Alle * Funktionen in OCaml nehmen immer genau ein Argument. Die Syntax 'removeFromList et' (die als '(removeFromList e) t'parst, weil die Funktionsanwendung linksassoziativ ist) wendet einfach' removeFromList' auf 'e' an und wendet dann das Ergebnis davon an (was zufällig eine Funktion ist). zu "t". – newacct

Antwort

4

Sie es mit zwei Parametern zu deklarieren. Die Syntax:

let f = function ... 

für

als Verknüpfung zu sehen
let f x = match x with 

Also, Ihre Definition ist eigentlich:

let rec removeFromList e lst = match lst with 
    h :: t -> if h=e then h else h :: removeFromList e 
Verwandte Themen