Named parameters: Difference between revisions

Content added Content deleted
(Added Scheme)
Line 588: Line 588:
example(:grill => "lamb kebab", :bar => 3.14)
example(:grill => "lamb kebab", :bar => 3.14)
# => "foo is 0, bar is 3.14, and grill is lamb kebab"</lang>
# => "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}}==
=={{header|Smalltalk}}==