Named parameters: Difference between revisions
Content added Content deleted
(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}}==
|