Re: if expression and match expression
| Newsgroups | gmane.comp.lang.ocaml.beginners |
|---|---|
| Message-ID | <20151009124828.GA38989@pristine> |
Sébastien and Gabriel; Thank you for your reply. Got it. My original goal was creating has_element function without if expression. And seems it is the one I was looking for; let rec has_element2 l e = match l with | [] -> false | h::t when h = e -> true | _ -> has_element2 (List.tl l) e ;; Thank you for all your help! Thanks to Hendrik as well :-) Regards, Seungjin On 10/09 09:49 AM, Sébastien Dailly [email protected] [ocaml_beginners] wrote: > Le 2015-10-09 05:55, Seung-jin Kim [email protected] > [ocaml_beginners] a écrit : > > First of all, > > There was a typo in my very initial question. > > my has_element1 should be > > > > let rec has_element1 l e = > > match l with > > | [] -> false > > | h::t -> if e = h then true else has_element1 t e;; > > > > Anyway,, Seems everyone got my point. :-) First time to post this > > group and very new to ocaml. > > > > I did with ( ) for my second match. > > > > utop[91]> let rec has_element2 l e = > > match l with > > | [] -> false > > | h::t -> ( match h with > > | e -> true > > | _ -> has_element2 t e > > ) > > ;; > > > > val has_element2 : 'a list -> 'b -> bool = <fun> > > Characters 107-108: > > Warning 11: this match case is unused. > > utop[92]> has_element2 [2;3;4] 10;; > > - : bool = true > > utop[93]> > > > > Still getting the same warning message with the same result. > > Hello, > > when you write > > > match l with > > | [] -> false > > | h::t -> … > > You do not match l with an existing variables named h and t. You create > two new ones which match the pattern. > > The same applies when you write : > > > match h with > > | e -> true > > You create a new variable name « e » which override the existing > variable. Of course this pattern always match. > > You can write : > > - either an if / else structure as in your first example. > - either a gard pattern in your pattern matching. > > Regards Seungjin Kim