newLISP Fan Club

Forum => newLISP in the real world => Topic started by: kib2 on December 02, 2008, 04:05:59 AM

Title: functions parameters
Post by: kib2 on December 02, 2008, 04:05:59 AM
Hi,



I just wanted to know how to handle functions parameters in newLisp, in particular those ones (I only saw optionnal parameters in the docs):



- rest parameters;

- keyword parameters;



Thanks.
Title:
Post by: newdep on December 02, 2008, 05:28:34 AM
&rest and &optional like CL could used like (args) in newlisp like (define (foo a b) (args)) but you have to build around it al ittle yourself..
Title:
Post by: Lutz on December 02, 2008, 05:33:55 AM
You can implement named parameters this way:


(define-macro (foo)
    (local (len width height)
        (bind (args) true)
        (println "len: " len " width:" width " height:" height)
))      

(foo (width (+ 15 5)) (height 30) (len 10))

; this prints

len: 10 width:20 height:30


Arguments are evaluated and assigned to the local variables.
Title:
Post by: Kazimir Majorinc on December 02, 2008, 06:33:07 AM
Very elegant solution.
Title:
Post by: kib2 on December 02, 2008, 08:16:07 AM
Thanks for all your replies,



newdep : &rest and &optional were exactly what I was looking for. Now I need to test "args" within newLisp.



Lutz : this is a great example of a macro use : thanks for it !



Do you think such a markup langage //http://www.nongnu.org/skribilo/ can be implemented in newLisp? In fact, that's what I want to do as a first project (with less features), but maybe I'm too pretentious/ambitious.
Title:
Post by: cormullion on December 02, 2008, 09:06:37 AM
I often ask for named parameters too  :-) (//http://www.alh.net/newlisp/phpbb/viewtopic.php?t=2180) There are many ways of implementing it - I just usually forget them when I need them...



skribilo looks interesting - but a substantial project too.
Title:
Post by: xytroxon on December 02, 2008, 10:08:06 AM
Quote from: "Lutz"You can implement named parameters this way:


(define-macro (foo)
    (local (len width height)
        (bind (args) true)
        (println "len: " len " width:" width " height:" height)
))      

(foo (width (+ 15 5)) (height 30) (len 10))

; this prints

len: 10 width:20 height:30


Arguments are evaluated and assigned to the local variables.


Lutz, could you add this to "Code Patterns" section 4. Local variables?



-- xytroxon