98 lines
2.4 KiB
Markdown
98 lines
2.4 KiB
Markdown
|
# Boom
|
||
|
|
||
|
**Problem:**
|
||
|
Return the numbers 0-n, but replace every number with a '3' as one of the digits with "Boom"
|
||
|
|
||
|
I did this in the type system because I wanted to piss off my flatmate, who gave me this to try out, but also because I hate myself.
|
||
|
|
||
|
I cheated a little at the end, because I cbf converting my representation to standard Church Encoding, so everything is a list of digits instead of a number.
|
||
|
|
||
|
## Running
|
||
|
|
||
|
start up `ghci` and type:
|
||
|
|
||
|
```
|
||
|
:t solution (nil :: X)
|
||
|
```
|
||
|
|
||
|
where X is a church encoding using S as the successor function, and Z as the atom.
|
||
|
|
||
|
## Example
|
||
|
|
||
|
```
|
||
|
:t solution (nil :: (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S Z))))))))))))))))))))))))))
|
||
|
```
|
||
|
|
||
|
will return (formatted to save your eyes):
|
||
|
|
||
|
```
|
||
|
solution (nil :: (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S Z))))))))))))))))))))))))))
|
||
|
:: Cons
|
||
|
(Cons Z Nil)
|
||
|
(Cons
|
||
|
(Cons (S Z) Nil)
|
||
|
(Cons
|
||
|
(Cons (S (S Z)) Nil)
|
||
|
(Cons
|
||
|
Boom
|
||
|
(Cons
|
||
|
(Cons (S (S (S (S Z)))) Nil)
|
||
|
(Cons
|
||
|
(Cons (S (S (S (S (S Z))))) Nil)
|
||
|
(Cons
|
||
|
(Cons (S (S (S (S (S (S Z)))))) Nil)
|
||
|
(Cons
|
||
|
(Cons (S (S (S (S (S (S (S Z))))))) Nil)
|
||
|
(Cons
|
||
|
(Cons (S (S (S (S (S (S (S (S Z)))))))) Nil)
|
||
|
(Cons
|
||
|
(Cons (S (S (S (S (S (S (S (S (S Z))))))))) Nil)
|
||
|
(Cons
|
||
|
(Cons (S Z)
|
||
|
(Cons Z Nil))
|
||
|
(Cons
|
||
|
(Cons (S Z)
|
||
|
(Cons (S Z) Nil))
|
||
|
(Cons
|
||
|
(Cons (S Z)
|
||
|
(Cons (S (S Z)) Nil))
|
||
|
(Cons
|
||
|
Boom
|
||
|
(Cons
|
||
|
(Cons (S Z)
|
||
|
(Cons (S (S (S (S Z)))) Nil))
|
||
|
(Cons
|
||
|
(Cons (S Z)
|
||
|
(Cons (S (S (S (S (S Z))))) Nil))
|
||
|
(Cons
|
||
|
(Cons (S Z)
|
||
|
(Cons (S (S (S (S (S (S Z)))))) Nil))
|
||
|
(Cons
|
||
|
(Cons (S Z)
|
||
|
(Cons (S (S (S (S (S (S (S Z))))))) Nil))
|
||
|
(Cons
|
||
|
(Cons (S Z)
|
||
|
(Cons (S (S (S (S (S (S (S (S Z)))))))) Nil))
|
||
|
(Cons
|
||
|
(Cons (S Z)
|
||
|
(Cons (S (S (S (S (S (S (S (S (S Z))))))))) Nil))
|
||
|
(Cons
|
||
|
(Cons (S (S Z))
|
||
|
(Cons Z Nil))
|
||
|
(Cons
|
||
|
(Cons (S (S Z))
|
||
|
(Cons (S Z) Nil))
|
||
|
(Cons
|
||
|
(Cons (S (S Z))
|
||
|
(Cons (S (S Z)) Nil))
|
||
|
(Cons
|
||
|
Boom
|
||
|
(Cons
|
||
|
(Cons (S (S Z))
|
||
|
(Cons (S (S (S (S Z)))) Nil))
|
||
|
(Cons
|
||
|
(Cons (S (S Z))
|
||
|
(Cons (S (S (S (S (S Z))))) Nil))
|
||
|
Nil)))))))))))))))))))))))))
|
||
|
```
|