Alternative Curry Syntax#
This is an experimental extension. It is not well specified and may change or disappear in the future. This documentation is largely in the format of a DEP in case we want to propose it in the future.
An alternative syntax for currying functions has been provided within Open Dylan.
This document is public domain.
There may be multiple placeholder parameters and they can be in any parameter position. A curried function that has 2 placeholder parameters will need 2 parameters when called.
This can be used with operators as well.
There are situations in which using
can result in confusing code that is difficult to understand at
a quick glance. The alternative syntax provides an easy to understand
way to set up a curried function.
The alternative curry syntax was implemented in 1999 by Keith Playford and has been in the compiler since then. It does not break any existing code.
In this example, the two curried functions will have the same result:
let to-string-1 = curry(as, <byte-string>); let to-string-2 = as(<byte-string>, _);
As indicated earlier, multiple arguments being omitted is supported:
define function adder(a, b, c) a + b + c end; let a = adder(_, 2, _); let r = a(1, 3); // r == 6
Placeholder arguments can be used with operators as well:
let incr = _ + 1; let double = _ * 2;
These can be used inline with functions that take functions as arguments:
format-out("%=", map(_ + 1, #(1, 2, 3, 4));
Taking some examples from the Open Dylan compiler, some simplifications are possible:
map(method (o) print-condition(o, #t) end, o.subnotes) let outer-values = map(method (variable :: <string>) jam-variable(jam, variable, default: #f) end, variables);
could be rewritten as:
map(print-condition(_, #t), o.subnotes) let outer-values = map(jam-variable(jam, _, default: #f), variables);
There are no backwards compatibility considerations for this functionality
_ is not a valid variable name in the language as specified by
This functionality has been present within Open Dylan since 1999. The code
is largely focused in these methods in