Partial application on Nth argument
Salih Dincer
salihdb at hotmail.com
Thu Dec 5 21:14:32 UTC 2024
On Wednesday, 4 December 2024 at 21:33:46 UTC, Salih Dincer wrote:
> Maybe I'm misunderstanding...
Now I get it! In fact, we bind a chosen argument. This reveals
the inadequacy of the name chosen for the library. I've made it
better by adding a few lines of code:
```d
auto hello(T)(T a, T b, T c, T d, T e)
=> a~b~c~d~e;
enum msg { h = "h", e = "e", l = "l", o = "o" }
void main()
{
with(msg)
{
assert(bindArgument!(hello, 0, h)(e,l,l,o) == "hello");
assert(bindArgument!(hello, 1, e)(h,l,l,o) == "hello");
assert(bindArgument!(hello, 2, l)(h,e,l,o) == "hello");
assert(bindArgument!(hello, 3, l)(h,e,l,o) == "hello");
assert(bindArgument!(hello, 4, o)(h,e,l,l) == "hello");
alias Fun = bindArgument!(hello, 5, e);
//Fun(h, l, l, o).writeln; //error
}
}
template bindArgument(alias func, size_t N, fixedArgs...)
{
static auto bindArgument(A...)(A argsRest)
if(N <= argsRest.length)
{
static if (N == 0)
return func(fixedArgs[0], argsRest);
else
return func(argsRest[0 .. N],
fixedArgs[0],
argsRest[N .. $]);
}
}
```
SDB at 79
More information about the Digitalmars-d-learn
mailing list