Complete chapter 27

master
Gaël Depreeuw 6 years ago
parent 48e35067aa
commit 1d610d5096
  1. 102
      27-nonstrictness/27-nonstrictness.md

@ -0,0 +1,102 @@
# 27 Nonstrictness
## 27.5 Exercises: Evaluate
Excercise 1
```haskell
const 1 undefined
(\a -> \b -> a) 1 undefined
(\b -> 1) undefined
1
```
Exercise 2
```haskell
const undefined 1
(\a -> \b -> a) undefined 1
(\b -> undefined) 1
undefined
```
Exercise 3
```haskell
flip const undefined 1
(\f -> \a -> \b -> f b a) const undefined 1
(\a -> \b -> const b a) undefined 1
(\b -> const b undefined) 1
const 1 undefined -- same as Exercise 1 now
```
Exercise 4 follows same principle as Exercise 3 but leads to Exercise 2.
Exercise 5 follows same pattern as before but where 1 is undefined.
Exercise 6
```haskell
foldr const 'z' ['a'..'e']
const 'a' (foldr const 'z' ['b'..'e'])
'a'
```
Exercise 7
```haskell
foldr (flip const) 'z' ['a'..'e']
(flip const) 'a' (foldr (flip const) 'z' ['b'..'e'])
const (foldr (flip const) 'z' ['b'..'e']) 'a'
foldr (flip const) 'z' ['b'..'e']
(flip const) 'b' (foldr (flip const) 'z' ['c'..'e'])
const (foldr (flip const) 'z' ['c'..'e']) 'b'
foldr (flip const) 'z' ['c'..'e']
(flip const) 'c' (foldr (flip const) 'z' ['d','e'])
const (foldr (flip const) 'z' ['d','e']) 'c'
foldr (flip const) 'z' ['d','e']
(flip const) 'd' (foldr (flip const) 'z' ['e'])
const (foldr (flip const) 'z' ['e']) 'd'
foldr (flip const) 'z' ['e']
(flip const) 'e' (foldr (flip const) 'z' [])
const (foldr (flip const) 'z' []) 'e'
foldr (flip const) 'z' []
'z'
```
## 27.14 Chapter Exercises
### What will :sprint output
1. `x = _`
2. `x = "1"`
3. `x = _`
4. `x = 1`
5. `x = _`
6. `x = _`
### Will printing this expression result in bottom
1. No
2. Yes
3. Yes
4. No
5. No
6. No
7. Yes
### Make the expression bottom
There are different ways of doing this. This is one of them:
```haskell
x = undefined
y = "blah"
main = do
print (snd (x `seq` (x,y)))
```
Loading…
Cancel
Save