I have written several times before about using the Haskell programming language as a tool for exploring mathematics, but until now I had no good recommendation for people who were interested in learning it for that purpose (Real World Haskell is a great book if you are already a programmer and want to Get Things Done with Haskell, but not so great if you just want to have fun with it).
I am therefore happy to report that No Starch Press has just published Learn You a Haskell for Great Good! A Beginner’s Guide by Miran Lipovača. It’s a fantastic, fun, thorough introduction to Haskell, spiced up by Miran’s great sense of humor and zany illustrations. You can buy a paper copy or read it on the web for free!
Just for fun, in honor of the occasion:
> -- @powmod base exp m@ efficiently computes (base^exp (mod m)). > powmod :: Integer -> Integer -> Integer -> Integer > powmod _ 0 _ = 1 > powmod base exp m | even exp = (x * x) `mod` m > | otherwise = (x * x * base) `mod` m > where x = powmod base (exp `div` 2) m > > f n = powmod 2 n n > > -- http://oeis.org/A015910 > a015910 = map f [1..] > > -- http://oeis.org/A050259 > test = all (==3) > (map f [ 4700063497 > , 3468371109448915 > , 8365386194032363 > , 10991007971508067 > , 63130707451134435989380140059866138830623361447484274774099906755 > ] > )
*Main> take 50 a015910 [0,0,2,0,2,4,2,0,8,4,2,4,2,4,8,0,2,10,2,16,8,4,2,16,7,4,26,16,2,4,2,0,8,4,18,28,2,4,8,16,2,22,2,16,17,4,2,16,30,24] *Main> :set +s *Main> test True (0.01 secs, 1110184 bytes)