[ All Fragments ]
You can specify the arguments to a function by name. This can be useful when you need to add occasionally-used parameters to existing functions, similar to the way you can use default parameter values in languages like C++.
define function describe-list(my-list :: <list>, #key verbose?) => ()
format(*standard-output*, "{a <list>, size: %d", my-list.size);
if (verbose?)
format(*standard-output*, ", elements:");
for (item in my-list)
format(*standard-output*, " %=", item);
end for;
end if;
format(*standard-output*, "}");
end function;
This method could be invoked in one of several ways. The first
specifies no keyword arguments, and exhibits the default behavior:
describe-list(#(1, 2, 3, 4, 5, 6));
// prints "{a <list>, size: 6}"
Alternatively, the verbose? keyword argument could
be used to indicate the 'verbose' behavior was desired:
describe-list(#(5, 7, 3), verbose?: #t);
// prints "{a <list>, size: 3, elements: 5 7 3}"
Dylan's format statement works just like
printf, except that you can extend it to handle new types of
objects.