Sanırım bunu Whatsapp grubunda paylaşmıştım. Kaybetmeden buraya nakledeyim işinize yarar:
import std.stdio;
/// show parser ///
auto selfParse(char[] s) => s[9..$ - 2];
void show(string f = __FILE__,
int line = __LINE__, T)(T t) {
import std.range : drop, front;
File(f).byLine
.drop(line - 1)
.front
.selfParse
.writeln(": ", t);
}
/// show parser ///
template f(size_t n) if(n<22)
{
static if(n < 2) const f = 1;
else const f = n * f!(n - 1);
}
void main()
{
int i = 3;
show(i++ + ++i * i);
show(i = 3);
show(i);
T factorial(T)(T n)=>n<2?1:n*factorial(--n);
show(factorial(10));
show(f!21);
}
/* ÇIKTISI:
i++ + ++i * i: 28
i = 3: 3
i: 3
factorial(10): 3628800
f!21: 14197454024290336768
//*/
Konu şurada ortaya çıktı ve çözümü getiren taktir edilmiştir:
https://forum.dlang.org/post/qytuxipgkxulnutvddwx@forum.dlang.org
SDB@79