[Haskell-cafe] Roman Numerals and Haskell Syntax abuse

Donald Bruce Stewart dons at cse.unsw.edu.au
Tue Jul 6 00:11:15 EDT 2004


ajb:
> Quoting George Russell <ger at informatik.uni-bremen.de>:
> 
> > The following declaration for a function for converting positive
> > integers to Roman numerals is 181 characters long.
> >
> > Is there a shorter one?
> 
> Being a judge, I can't write your obfuscated haskell contest entry for
> you.  However, as a suggestion, you may be able to merge the if-then-else
> with the guard syntax.  That should save a few characters.
> 
> > roman=f[(i-j,i)|i<-[2,4..8],j<-[2,1]]where
> > f(d@((a,b):c))n|n<1=""|n>=t!!a=s!!a:f d(n-t!!a)|1>0=if n+t!!b>=t!!a then
> > s!!b:f d(n+t!!b)else f c n;s="mdclxvi";t=[1000,500,100,50,10,5,1]

I feel that obfuscated code should always have no space characters, and
line-justified such that each line has the same width, and have the
minimal number of keywords possible. And who uses alpha-numerics for
varsyms anyway -- throw them out! All this is easy to achieve by turning
off layout syntax, using extra parens, and rewriting keywords into
lambda abstractions.

At some point one loses the goal of writing the least number of
characters, and instead looks for the most unreadable code. The point at
which this happens should have a name.. Perhaps "the obfuscation horizon"
- the point from which no code returns? Witness
              http://www.cse.unsw.edu.au/~dons/pretty.html 
as an example of this syndrome.

-- Don


More information about the Haskell-Cafe mailing list