For each call, I believe. An exception might be if the call to nco is inlined into the calling function, but this is unlikely as nco is recursive.
So, you're probably better off with:
nco wn = nco' where wn' = cis wn nco' = 1 : map (wn'*) nco'
In which case it will only be evaluated once.
The original version should also evaluate the expression 'cis wn' only once:
nco :: RealFloat a => a -> [ Complex a ] nco wn = 1 : map ((*) (cis wn)) (nco wn)
You can verify this using an appropriate semantics for lazy evaluation. However, another way to think about it is to consider the expression (*) (cis wn) as (let x = cis wn in (*) x) which when first evaluated will create a suspension for x in the heap, and return \y -> (*) y x as its value. So x only gets allocated/evaluated once. Cheers, Simon