Haskell
Timon Gehr
timon.gehr at gmx.ch
Wed Aug 24 19:55:17 PDT 2011
On 08/25/2011 04:08 AM, bearophile wrote:
> Timon Gehr:
>
>> It is especially compact in that program,
>
> The coding style of that program is an unreadable mess, example:
>
> LList!T hamming(T)(){
> LList!T merge(LList!T xs, LList!T ys){
> return lz({
> auto x=xs.head, y=ys.head;
> if(x()<y()) return cons(x,merge(xs.tail,ys))();
> else if(x()>y()) return cons(y,merge(xs,ys.tail))();
> else return cons(x,merge(xs.tail,ys.tail))();
> });
> }
>
> return lz({
> LList!T r;
> r=cons(st(1),lz({return merge(merge(map((Lazy!T a){return lz({return 2*a();});},r),map((Lazy!T a){return lz({return 3*a();});},r)),map((Lazy!T a){return lz({return 5*a();});},r))();}));
> return r();
> });
> }
>
>
> This is a bit better:
>
> LList!T hamming(T)() {
> static LList!T merge(LList!T xs, LList!T ys) {
> return lz({
> auto x = xs.head;
> auto y = ys.head;
> if (x()< y())
> return cons(x, merge(xs.tail, ys))();
> else if (x()> y())
> return cons(y, merge(xs, ys.tail))();
> else
> return cons(x, merge(xs.tail, ys.tail))();
> });
> }
>
> return lz({
> LList!T r;
> r = cons(st(BigInt(1)), lz({
> return merge(merge(map((Lazy!T a){ return lz({ return 2 * a(); }); }, r),
> map((Lazy!T a){ return lz({ return 3 * a(); }); }, r)),
> map((Lazy!T a){ return lz({ return 5 * a(); }); }, r))();
> }));
> return r();
> });
> }
>
Well, the main reason it is an unreadable mess is the bug with lazy and
closures I reported, and I think inserting whitespace does not
necessarily make the code better readable. (I like especially the first
half of the code snippet better in the format I provided)
I usually do not spend much time to format my code, especially if like
here the end result is not significantly better readable. Maybe code
formatting should be automated completely via a dedicated tool.
>
>> I am starting to think this is not as intended.
>
> I think it's a DMD bug. Fit for Bugzilla.
>
See http://d.puremagic.com/issues/show_bug.cgi?id=6552
>
>> I cannot seem to find it, but I'd like to vote on it. Do you have a link?
>
> I have updated this:
> http://d.puremagic.com/issues/show_bug.cgi?id=5970
>
Thanks.
More information about the Digitalmars-d
mailing list