Re: pattern matching with keyword function
| Newsgroups | gmane.comp.lang.ocaml.beginners |
|---|---|
| Message-ID | <[email protected]> |
On 08.04.2016 11:08, 'Mr. Herr' [email protected] [ocaml_beginners] wrote: > > > > > On 08.04.2016 10:50, cedlemo [email protected] [ocaml_beginners] wrote: >> >> >> Hi, >> >> I have "stumbled" on this simple function >> >> let rec flatten = function >> [] -> [] >> | l::r -> l @ flatten r >> >> At first glance I asked myself why they don't use the last remaining >> element of the list >> then I see that the line >> [] -> [] >> >> doesn't have any "|" at the beginning. >> >> Could you explain we how does that works? >> And maybe could you give me one or more links for informations/examples >> on the patterns matching >> with the function keywords. >> > In pattern matching, the first vertical bar is optional. > Look at this, it is "normal" not to have a bar after "function": > > let rec flatten = function [] -> [] | h :: t -> h @ flatten t > > It works like this: > > take the first sublist from the list, and list-append it to the next sublist, > until the list is done. A sequence of List.cons - operator :: - always terminates > in []. > > More info: try to start reading the fine manual, because once you mastered reading > type signatures you get authoritative information. First stop for more OCaml info > is ocaml.org I want to add specifically this link to it: http://caml.inria.fr/pub/docs/oreilly-book/html/book-ora015.html#toc11 It is a little confusing for beginners that there are three syntaxes for defining functions. /Str.