On Monday, 9 July 2012 at 11:40:37 UTC, Gor Gyolchanyan wrote:
On Mon, Jul 9, 2012 at 3:30 PM, Paulo Pinto
<pj...@progtools.org> wrote:
On Monday, 9 July 2012 at 11:16:45 UTC, Gor Gyolchanyan wrote:
I've put together a code sample, which could demonstrate the
awesome power
of D when it comes to getting good results very quickly and
safely.
Perhaps
it could end up on display for newcomers:
import std.traits;
/// Returns the t-th point on the bezier curve, defined by
non-empty set p
of d-dimensional points, where t : [0, 1] and d > 1.
real[d] bezier(size_t d, Number)(Number[d][] p, Number t)
if(d > 1 && isFloatingPoint!Number)
in
{
assert(p.length > 0);
assert(t >= 0.0L && t <= 1.0L);
}
body
{
return p.length > 1 ? (1 - t) * p[0..$-1].bezier(t) + t *
p[1..$].bezier(t) : p[0];
}
/// Returns k unidistant points on the bezier curve, defined
by non-empty
set p of d-dimensional points, where k > 0 and d > 1.
real[d][] bezier(size_t d, Number)(Number[d][] p, size_t k)
if(d > 1 && isFloatingPoint!Number)
in
{
assert(p.length > 0);
assert(k > 0);
}
body
{
Number[d][] result = new Number[d][k];
foreach(i; 0..k)
result[k] = p.bezier(i * (1.0L / k));
return result;
}
I would not show this to newcomers, as they would probably go
running for
Go.
This type of code is quite nice and the reason why I think I
am better
served with D than Go, but newcomers without strong generic
programming
background in other languages might get scared.
--
Paulo
You're right. This is a bit advanced code sample, which uses
templates,
template constraints, contract programming among syntax
advantages of D.
At least, with a main() and an input, it would be a bit more
interesting and illustrative of the "modeling power" of D than
the examples of the http://dlang.org/index.html home page, which
are stupid and mostly don't work at all. (even the simplest
example gives the ridiculous result of 895 until one manually
breaks the input text with carriage returns).