melanoman: (Default)
melanoman ([personal profile] melanoman) wrote2011-09-17 10:10 am

Haskell Notes for old farts

Name reminds me of Leave It to Beaver

not-equals is /= instead of !=

LHFGG says ++ implementation has O(|left|) concatenation instead of O(1).
Look for a streams implementation. (see "comprehension" below)
colon is the cons operator
list.get(x) is !! x

car/cdr is head/tail
last/butlast is last/init

cddddr is drop 4 (where 4 is the count of d's) so tail is drop 1

max and min are spelled out
[x..y] specifies a range with step +1
[x,x2..y] specifies a range with step (x2-x1)
.. works for floats

map-filter combo is call a "comprehension"
[expression | x<-[range], constraint]
func x y can be syntactic sugared as x `func` y

let makes variables (scope?)

The following works, so cons-stream is lazy as it should be
let nats = [1,2..]
let evens = [2*x | x<-nats]
let bomb = nats ++ evens
take 4 bomb


Multiple ranges does a walk of all combinations with first list incrementing most slowly and so on.

underscore is used both as a void type and /dev/null for values

If an = without a let a function declaration?
let expr = value
myFunc arg = value