Named parameters: Difference between revisions

Added Scheme
(Added Scheme)
Line 588:
example(:grill => "lamb kebab", :bar => 3.14)
# => "foo is 0, bar is 3.14, and grill is lamb kebab"</lang>
 
=={{header|Scheme}}==
<lang scheme>
(define (keyarg-parser argdefs args kont)
(apply kont
(map (lambda (argdef)
(let loop ((args args))
(cond ((null? args)
(cadr argdef))
((eq? (car argdef) (car args))
(cadr args))
(else
(loop (cdr args))))))
argdefs)))
 
(define (print-name . args)
(keyarg-parser '((first #f)(last "?"))
args
(lambda (first last)
(display last)
(cond (first
(display ", ")
(display first)))
(newline))))
</lang>
 
<lang scheme>
=> (print-name)
?
=> (print-name 'first "John")
?, John
=>(print-name 'first "John" 'last "Doe")
Doe, John
=>(print-name 'last "Doe")
Doe
</lang>
 
=={{header|Smalltalk}}==
Anonymous user