Next: Recursive types and functions, Previous: Tuples, Up: Extensions to C
L functions can have default arguments UNIMPLEMENTED, like C++ ones:
     Int foo(Int bar = 3)
     {
       bar
     }
     
     foo(5); //5
     foo();  //3
  L functions argument passing may also be done using keyword arguments UNIMPLEMENTED:
     Int foo(Int bar, Int baz)
     {
       10 * bar + baz
     }
  If you write:
     Int foo(Int bar = 1, Int baz)
     {
       10 * bar + baz
     }
  Then foo can only be called like this:
     foo(3, 4)  //OK, 34
     foo(baz:5) //OK, 15
     foo(5)     //Wrong
  Use of keyword arguments is a really good style when you create functions that create complex objects (structures and records), especially when they contain fields that have the same type.
For instance:
let richards_shoes = Shoes(color:Green, sole_color:Brown)
Is much better style than
let richards_shoes = Shoes(Green, Brown)
In general, it is better to use them when a function has several arguments of the same type, or several arguments at all. It makes your code more readable.
You can also use them for “cosmetic” usage, as in:
     foreach(a, in:list) {...}
     foreach(element:a, in:list) {...}
     divide(25, by:73);