michael rice nowgate at yahoo.com
Sat Jul 31 12:59:39 EDT 2010

```OK, in f, *length* already knows it's argument is a list.

In g, *length* doesn't know what's inside the parens, extra evaluation there. So g is already ahead before we get to what's inside the [] and ().

But since both still have eval x to *thunk* : *thunk*,  g evaluates "to a deeper level?"

Michael

> Wouldn't both functions need to evaluate x to the same level, *thunk* : *thunk* to insure listhood?
>
> f x = length [head *thunk* : *thunk*]
> g x = length (tail *thunk* : *thunk*)
>
> Michael
>
>
> _______________________________________________
>

Notice the two different kinds of brackets being used in f versus g :)

--- On Sat, 7/31/10, Ben Millwood <haskell at benmachine.co.uk> wrote:

From: Ben Millwood <haskell at benmachine.co.uk>
To: "michael rice" <nowgate at yahoo.com>
Date: Saturday, July 31, 2010, 12:38 PM

On Sat, Jul 31, 2010 at 4:56 PM, michael rice <nowgate at yahoo.com> wrote:
>
>
>
> Given two functions of one parameter, f and g, we say f is stricter than g if f x evaluates x to a deeper level than g x
>
> Exercises
>
>    1. Which is the stricter function?
>
> f x = length [head x]
> g x = length (tail x)
>
>
>
> Prelude> let f x = length [head x]
> Prelude> let g x = length (tail x)
> Prelude> f undefined
> 1
> Prelude> g undefined
> *** Exception: Prelude.undefined
> Prelude>
>
>
>
> So, g is stricter than f?
>
> Wouldn't both functions need to evaluate x to the same level, *thunk* : *thunk* to insure listhood?
>
> f x = length [head *thunk* : *thunk*]
> g x = length (tail *thunk* : *thunk*)
>
> Michael
>
>
> _______________________________________________
>

Notice the two different kinds of brackets being used in f versus g :)

-------------- next part --------------
An HTML attachment was scrubbed...