skx / yal

Yet another lisp interpreter
GNU General Public License v2.0
16 stars 0 forks source link

Allow default arguments #131

Closed skx closed 1 year ago

skx commented 1 year ago

We typically define a function like this:

 (set! hello1 (fn* (name)
   (print "Hello %s" name)))

Here we say there is a parameter "name" which must be supplied, and that is later used.

If we instead say that parameters can be lists we can allow the first value to be the name, and the second a default value if nothing is actually passed, like so:

 (set! hello2 (fn* ( (name "World") )
    (print "Hello %s"  name)))

These could be used like so:

 (hello1 "Steve")  ; "Hello Steve"

 (hello2 "Steve")  ; "Hello Steve"
 (hello2)          ; "Hello World"

I've not yet experimented with supplying defaults in the non-final arguments, because that could screw things up. But for simple cases like the one above it seems to work.

Once complete this will close #130, however I need to add test-cases..