[an error occurred while processing this directive]

## cs150: Notes 30

#### Schedule

• This week: read Chapter 13
• Someday this week, there may be a "surprise" quiz. Your quiz grade will be the maximum of your grades on the two quizzes. The "surprise" quiz will cover the readings from Neil de Grasse Tyson; Gödel, Escher, Bach; and the article on John Backus (from Notes 26).
• Wednesday, 4 April: Last day to arrange an "extra ambitious" ps9 project that will replace ps8
• Friday, 6 April: Problem Set 7
• Monday, 9 April: Project teams and ideas for PS9
• Friday, 13 April: Problem Set 8 (out Friday, 6 April)
• Friday, 20 April: Exam 2 (out Monday, 16 April)
• Monday, 30 April: Project Presentations (Problem Set 9)
• Monday, 7 May: Last day to turn in Final Exam (out Monday, 30 April)

### Lazy Evaluation

What are the advantages of lazy evaluation?

What are the disadvantages of lazy evaluation?

Give an example of an expression that evaluates with both eager and lazy evaluation, but takes much longer to evaluate with eager evaluation.

What expressions take longer to evaluate with lazy evaluation than with eager evaluation?

```class Thunk:
def __init__(self, expr, env):
self._expr = expr
self._env = env
self._evaluated = False
def value(self):
if not self._evaluated:
self._value = forceeval(self._expr, self._env)
self._evaluated = True
return self._value
```
```def forceeval(expr, env):
value = meval(expr, env)
if isinstance(value, Thunk):
return value.value()
else:
return value
```

#### Eager Application Rule

```def evalApplication(expr, env):
subexprvals = map (lambda sexpr: meval(sexpr, env), expr)
return mapply(subexprvals[0], subexprvals[1:])
```

#### Lazy Application Rule

```def evalApplication(expr, env):

ops = map (lambda sexpr: _______________________, expr[1:])

return mapply(_________(expr[0], env), ops)
```
Like most of my generation, I was brought up on the saying: 'Satan finds some mischief for idle hands to do.' Being a highly virtuous child, I believed all that I was told, and acquired a conscience which has kept me working hard down to the present moment. But although my conscience has controlled my actions, my opinions have undergone a revolution. I think that there is far too much work done in the world, that immense harm is caused by the belief that work is virtuous, and that what needs to be preached in modern industrial countries is quite different from what always has been preached. Everyone knows the story of the traveler in Naples who saw twelve beggars lying in the sun (it was before the days of Mussolini), and offered a lira to the laziest of them. Eleven of them jumped up to claim it, so he gave it to the twelfth. this traveler was on the right lines. But in countries which do not enjoy Mediterranean sunshine idleness is more difficult, and a great public propaganda will be required to inaugurate it. I hope that, after reading the following pages, the leaders of the YMCA will start a campaign to induce good young men to do nothing. If so, I shall not have lived in vain. ...

All this is only preliminary. I want to say, in all seriousness, that a great deal of harm is being done in the modern world by belief in the virtuousness of work, and that the road to happiness and prosperity lies in an organized diminution of work.

First of all: what is work? Work is of two kinds: first, altering the position of matter at or near the earth's surface relatively to other such matter; second, telling other people to do so. The first kind is unpleasant and ill paid; the second is pleasant and highly paid. The second kind is capable of indefinite extension: there are not only those who give orders, but those who give advice as to what orders should be given. Usually two opposite kinds of advice are given simultaneously by two organized bodies of men; this is called politics.

From In Praise of Idleness, by Bertrand Russell (co-author of Principia Mathematica), 1932