parent
48e35067aa
commit
1d610d5096
1 changed files with 102 additions and 0 deletions
@ -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…
Reference in new issue