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}}== |