Understanding Computation (33 page)

Read Understanding Computation Online

Authors: Tom Stuart

Tags: #COMPUTERS / Programming / General

BOOK: Understanding Computation
10.75Mb size Format: txt, pdf, ePub
Strings

Strings are easy to
handle: we can just represent them as lists of numbers, as
long as we agree on an encoding that determines which number represents
which character.

We can choose any encoding we want, so instead of using a general-purpose one like
ASCII, let’s design a new one that’s more convenient for FizzBuzz. We only need to encode
digits and the strings
'FizzBuzz'
,
'Fizz'
, and
'Buzz'
, so we can
use the numbers
0
to
9
to represent the characters
'0'
to
'9'
, and the numbers from
10
to
14
to encode the characters
'B'
,
'F'
,
'i'
,
'u'
, and
'z'
.

This already gives us a way to represent the string literals we
need (being careful not to clobber the Z combinator):

TEN
=
MULTIPLY
[
TWO
][
FIVE
]
B
=
TEN
F
=
INCREMENT
[
B
]
I
=
INCREMENT
[
F
]
U
=
INCREMENT
[
I
]
ZED
=
INCREMENT
[
U
]
FIZZ
=
UNSHIFT
[
UNSHIFT
[
UNSHIFT
[
UNSHIFT
[
EMPTY
][
ZED
]][
ZED
]][
I
]][
F
]
BUZZ
=
UNSHIFT
[
UNSHIFT
[
UNSHIFT
[
UNSHIFT
[
EMPTY
][
ZED
]][
ZED
]][
U
]][
B
]
FIZZBUZZ
=
UNSHIFT
[
UNSHIFT
[
UNSHIFT
[
UNSHIFT
[
BUZZ
][
ZED
]][
ZED
]][
I
]][
F
]

To check that these work, we can write some external methods to
convert them into Ruby strings:

def
to_char
(
c
)
'0123456789BFiuz'
.
slice
(
to_integer
(
c
))
end
def
to_string
(
s
)
to_array
(
s
)
.
map
{
|
c
|
to_char
(
c
)
}
.
join
end

Alright, do the strings work?

>>
to_char
(
ZED
)
=> "z"
>>
to_string
(
FIZZBUZZ
)
=> "FizzBuzz"

Great. So we can use them in FizzBuzz:

MAP
[
RANGE
[
ONE
][
HUNDRED
]][->
n
{
IF
[
IS_ZERO
[
MOD
[
n
][
FIFTEEN
]]][
FIZZBUZZ
][
IF
[
IS_ZERO
[
MOD
[
n
][
THREE
]]][
FIZZ
][
IF
[
IS_ZERO
[
MOD
[
n
][
FIVE
]]][
BUZZ
][
n
.
to_s
]]]
}
]

The very last thing to implement is
Fixnum#to_s
. For
that, we need to be able to split a number into its component digits, and here’s one way to
do that in Ruby:

def
to_digits
(
n
)
previous_digits
=
if
n
<
10
[]
else
to_digits
(
n
/
10
)
end
previous_digits
.
push
(
n
%
10
)
end

We haven’t implemented
<
, but we can dodge that
problem by using
n <= 9
instead of
n < 10
. Unfortunately, we can’t dodge implementing
Fixnum#/
and
Array#push
, so here they are:

DIV
=
Z
[->
f
{
->
m
{
->
n
{
IF
[
IS_LESS_OR_EQUAL
[
n
][
m
]][
->
x
{
INCREMENT
[
f
[
SUBTRACT
[
m
][
n
]][
n
]][
x
]
}
][
ZERO
]
}
}
}
]
PUSH
=
->
l
{
->
x
{
FOLD
[
l
][
UNSHIFT
[
EMPTY
][
x
]][
UNSHIFT
]
}
}

Now we can translate
#to_digits
into a proc:

TO_DIGITS
=
Z
[->
f
{
->
n
{
PUSH
[
IF
[
IS_LESS_OR_EQUAL
[
n
][
DECREMENT
[
TEN
]]][
EMPTY
][
->
x
{
f
[
DIV
[
n
][
TEN
]][
x
]
}
]
][
MOD
[
n
][
TEN
]]
}
}
]

Does it work?

>>
to_array
(
TO_DIGITS
[
FIVE
]
)
.
map
{
|
p
|
to_integer
(
p
)
}
=> [5]
>>
to_array
(
TO_DIGITS
[
POWER
[
FIVE
][
THREE
]]
)
.
map
{
|
p
|
to_integer
(
p
)
}
=> [1, 2, 5]

Yes. And because we had the foresight to design a string encoding
where
1
represents
'1'
and so on, the arrays produced by
TO_DIGITS
are already valid strings:

>>
to_string
(
TO_DIGITS
[
FIVE
]
)
=> "5"
>>
to_string
(
TO_DIGITS
[
POWER
[
FIVE
][
THREE
]]
)
=> "125"

So we can replace
#to_s
with
TO_DIGITS
in FizzBuzz:

MAP
[
RANGE
[
ONE
][
HUNDRED
]][->
n
{
IF
[
IS_ZERO
[
MOD
[
n
][
FIFTEEN
]]][
FIZZBUZZ
][
IF
[
IS_ZERO
[
MOD
[
n
][
THREE
]]][
FIZZ
][
IF
[
IS_ZERO
[
MOD
[
n
][
FIVE
]]][
BUZZ
][
TO_DIGITS
[
n
]
]]]
}
]
The Solution

We’ve finally
finished! (This would’ve been the longest, most awkward job interview ever.) We
now have an implementation of FizzBuzz written entirely with procs. Let’s run it to make
sure it works properly:

>>
solution
=
MAP
[
RANGE
[
ONE
][
HUNDRED
]][->
n
{
IF
[
IS_ZERO
[
MOD
[
n
][
FIFTEEN
]]][
FIZZBUZZ
][
IF
[
IS_ZERO
[
MOD
[
n
][
THREE
]]][
FIZZ
][
IF
[
IS_ZERO
[
MOD
[
n
][
FIVE
]]][
BUZZ
][
TO_DIGITS
[
n
]
]]]
}
]
=> #
>>
to_array
(
solution
)
.
each
do
|
p
|
puts
to_string
(
p
)
end
;
nil
1
2
Fizz
4
Buzz
Fizz
7

94
Buzz
Fizz
97
98
Fizz
Buzz
=> nil

Having gone to so much trouble to make sure that every constant is
just an abbreviation of some longer expression, we owe it to ourselves
to replace each constant with its definition so we can see the complete
program:

-> k { -> f { -> f { -> x {
f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f {
-> l { -> x { -> g { -> b { b }[-> p { p[-> x { ->
y { x } }] }[l]][x][-> y { g[f[-> l { -> p { p[-> x { ->
y { y } }] }[-> p { p[-> x { -> y { y } }] }[l]]
}[l]][x][g]][-> l { -> p { p[-> x { -> y { x } }] }[-> p
{ p[-> x { -> y { y } }] }[l]] }[l]][y] }] } } } }][k][-> x {
-> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x {
-> y { x } }]][-> l { -> x { -> l { -> x { -> x {
-> y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x {
-> y { -> f { f[x][y] } } }[x][l]] } }[l][f[x]] } }] } }[-> f {
-> x { f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }]
}[-> f { -> m { -> n { -> b { b }[-> m { -> n { ->
n { n[-> x { -> x { -> y { y } } }][-> x { -> y { x } }]
}[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }]
}[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p {
p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x {
p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][->
x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p
{ -> x { x } }]]] }][m] } }[m][n]] } }[m][n]][-> x { -> l {
-> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y
{ y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[f[->
n { -> p { -> x { p[n[p][x]] } } }[m]][n]][m][x] }][-> x {
-> y { -> f { f[x][y] } } }[-> x { -> y { x } }][-> x {
-> y { x } }]] } } }][-> p { -> x { p[x] } }][-> p { -> x
{
p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[x]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
} }]][-> n { -> b { b }[-> n { n[-> x { -> x { -> y {
y } } }][-> x { -> y { x } }] }[-> f { -> x { f[-> y {
x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m {
-> n { -> b { b }[-> m { -> n { -> n { n[-> x { ->
x { -> y { y } } }][-> x { -> y { x } }] }[-> m { -> n {
n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x
{ -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y }
}] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p {
p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f {
f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]]
}][m] } }[m][n]] } }[n][m]][-> x { f[-> m { -> n { n[-> n {
-> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y {
-> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }]
}[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x
{ -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } }
}[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] }
}[m][n]][n][x] }][m] } } }][n][-> p { -> x {
p[p[p[p[p[p[p[p[p[p[p[p[p[p[p[x]]]]]]]]]]]]]]] } }]]][-> l { -> x
{ -> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y }
}][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l {
-> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y
{ y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l
{ -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { ->
y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[->
l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x {
-> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] }
}[-> l { -> x { -> x { -> y { -> f { f[x][y] } } }[->
x { -> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]]
} }[-> l { -> x { -> x { -> y { -> f { f[x][y] } }
}[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } }
}[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] }
} }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } }
}[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] }
} }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } }
}[x][l]] } }[-> x { -> y { -> f { f[x][y] } } }[-> x { ->
y { x } }][-> x { -> y { x } }]][-> n { -> p { -> x {
p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n
{ -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x {
p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n {
-> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x }
}] } }[-> p { -> x { p[p[x]] } }][-> p { -> x {
p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } }
}[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p {
-> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } }
}[-> m { -> n { n[-> m { -> n { n[-> n { -> p { ->
x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p
{ -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] }
}]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { ->
p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]]
} } }[-> m { -> n { n[-> m { -> n { n[-> n { -> p {
-> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] }
}[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]]
} }]]]]]][-> m { -> n { n[-> m { -> n { n[-> n { -> p
{ -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] }
}[-> p { -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]]
} }]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p
{ -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] }
} }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n {
n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } }
}][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]]
} }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p {
-> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } }
}[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p {
-> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n {
n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p {
-> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x
{ p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] }
} }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n {
n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } }
}][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]]
} }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]][-> n { -> p {
-> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n {
n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p {
-> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x
{ p[p[p[p[p[x]]]]] } }]]]][-> b { b }[-> n { n[-> x { -> x {
-> y { y } } }][-> x { -> y { x } }] }[-> f { -> x {
f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f {
-> m { -> n { -> b { b }[-> m { -> n { -> n { n[->
x { -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m {
-> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p
{ -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x {
-> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } }
}[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y {
-> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x
} }]]] }][m] } }[m][n]] } }[n][m]][-> x { f[-> m { -> n {
n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x
{ -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y }
}] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p {
p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f {
f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]]
}][m] } }[m][n]][n][x] }][m] } } }][n][-> p { -> x { p[p[p[x]]] }
}]]][-> l { -> x { -> x { -> y { -> f { f[x][y] } }
}[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } }
}[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] }
} }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } }
}[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] }
} }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } }
}[x][l]] } }[-> l { -> x { -> x { -> y { -> f { f[x][y] }
} }[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } }
}[x][l]] } }[-> x { -> y { -> f { f[x][y] } } }[-> x { ->
y { x } }][-> x { -> y { x } }]][-> n { -> p { -> x {
p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n
{ -> p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x {
p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n { n[-> n {
-> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x }
}] } }[-> p { -> x { p[p[x]] } }][-> p { -> x {
p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p { -> x { p[n[p][x]] } }
}[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p {
-> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } }
}[-> m { -> n { n[-> m { -> n { n[-> n { -> p { ->
x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p
{ -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] }
}]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { ->
p { -> x { p[n[p][x]] } } }[-> m { -> n { n[-> m { -> n {
n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p {
-> x { x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x
{ p[p[p[p[p[x]]]]] } }]]]]][-> n { -> p { -> x { p[n[p][x]] } }
}[-> m { -> n { n[-> m { -> n { n[-> n { -> p { ->
x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p
{ -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] }
}]]]][-> b { b }[-> n { n[-> x { -> x { -> y { y } }
}][-> x { -> y { x } }] }[-> f { -> x { f[-> y { x[x][y]
}] }[-> x { f[-> y { x[x][y] }] }] }[-> f { -> m { -> n {
-> b { b }[-> m { -> n { -> n { n[-> x { -> x { ->
y { y } } }][-> x { -> y { x } }] }[-> m { -> n { n[-> n
{ -> p { p[-> x { -> y { x } }] }[n[-> p { -> x { -> y
{ -> f { f[x][y] } } }[-> p { p[-> x { -> y { y } }]
}[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p { p[-> x
{ -> y { y } }] }[p]]] }][-> x { -> y { -> f { f[x][y] } }
}[-> p { -> x { x } }][-> p { -> x { x } }]]] }][m] }
}[m][n]] } }[n][m]][-> x { f[-> m { -> n { n[-> n { -> p
{ p[-> x { -> y { x } }] }[n[-> p { -> x { -> y { -> f
{ f[x][y] } } }[-> p { p[-> x { -> y { y } }] }[p]][-> n {
-> p { -> x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y }
}] }[p]]] }][-> x { -> y { -> f { f[x][y] } } }[-> p { ->
x { x } }][-> p { -> x { x } }]]] }][m] } }[m][n]][n][x] }][m] } }
}][n][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][-> l { -> x {
-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { y }
}][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l {
-> x { -> x { -> y { -> f { f[x][y] } } }[-> x { -> y
{ y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[-> l
{ -> x { -> x { -> y { -> f { f[x][y] } } }[-> x { ->
y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] } }[->
l { -> x { -> x { -> y { -> f { f[x][y] } } }[-> x {
-> y { y } }][-> x { -> y { -> f { f[x][y] } } }[x][l]] }
}[-> x { -> y { -> f { f[x][y] } } }[-> x { -> y { x }
}][-> x { -> y { x } }]][-> n { -> p { -> x { p[n[p][x]]
} } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> n { -> p {
-> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } }
}[-> m { -> n { n[-> m { -> n { n[-> n { -> p { ->
x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p
{ -> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] }
}]]]]]]][-> n { -> p { -> x { p[n[p][x]] } } }[-> n { ->
p { -> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]]
} } }[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n {
n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } }
}][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]]
} }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]]][-> n { -> p {
-> x { p[n[p][x]] } } }[-> n { -> p { -> x { p[n[p][x]] } }
}[-> n { -> p { -> x { p[n[p][x]] } } }[-> m { -> n {
n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } }
}][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]]
} }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]]]]][-> m { -> n {
n[-> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } }
}][m] } }[m]][-> p { -> x { x } }] } }[-> p { -> x { p[p[x]]
} }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][-> f { -> x {
f[-> y { x[x][y] }] }[-> x { f[-> y { x[x][y] }] }] }[-> f {
-> n { -> l { -> x { -> f { -> x { f[-> y { x[x][y] }]
}[-> x { f[-> y { x[x][y] }] }] }[-> f { -> l { -> x {
-> g { -> b { b }[-> p { p[-> x { -> y { x } }]
}[l]][x][-> y { g[f[-> l { -> p { p[-> x { -> y { y } }]
}[-> p { p[-> x { -> y { y } }] }[l]] }[l]][x][g]][-> l {
-> p { p[-> x { -> y { y } }] }[-> p { p[-> x { -> y {
y } }] }[l]] }[l]][y] }] } } } }][l][-> l { -> x { -> x { ->
y { -> f { f[x][y] } } }[-> x { -> y { y } }][-> x { -> y
{ -> f { f[x][y] } } }[x][l]] } }[-> x { -> y { -> f {
f[x][y] } } }[-> x { -> y { x } }][-> x { -> y { x }
}]][x]][-> l { -> x { -> x { -> y { -> f { f[x][y] } }
}[-> x { -> y { y } }][-> x { -> y { -> f { f[x][y] } }
}[x][l]] } }] } }[-> b { b }[-> m { -> n { -> n { n[-> x
{ -> x { -> y { y } } }][-> x { -> y { x } }] }[-> m {
-> n { n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p
{ -> x { -> y { -> f { f[x][y] } } }[-> p { p[-> x {
-> y { y } }] }[p]][-> n { -> p { -> x { p[n[p][x]] } }
}[-> p { p[-> x { -> y { y } }] }[p]]] }][-> x { -> y {
-> f { f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x
} }]]] }][m] } }[m][n]] } }[n][-> n { -> p { p[-> x { -> y {
x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p
{ p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x {
p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][->
x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p
{ -> x { x } }]]] }[-> m { -> n { n[-> m { -> n { n[->
n { -> p { -> x { p[n[p][x]] } } }][m] } }[m]][-> p { -> x {
x } }] } }[-> p { -> x { p[p[x]] } }][-> p { -> x {
p[p[p[p[p[x]]]]] } }]]]][-> x { -> y { -> f { f[x][y] } }
}[-> x { -> y { x } }][-> x { -> y { x } }]][-> x {
f[-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y {
x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m {
-> n { -> n { n[-> x { -> x { -> y { y } } }][-> x {
-> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x {
-> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } }
}[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { ->
x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]]
}][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x }
}][-> p { -> x { x } }]]] }][m] } }[m][n]] } }[n][m]][-> x {
-> n { -> p { -> x { p[n[p][x]] } } }[f[-> m { -> n {
n[-> n { -> p { p[-> x { -> y { x } }] }[n[-> p { -> x
{ -> y { -> f { f[x][y] } } }[-> p { p[-> x { -> y { y }
}] }[p]][-> n { -> p { -> x { p[n[p][x]] } } }[-> p {
p[-> x { -> y { y } }] }[p]]] }][-> x { -> y { -> f {
f[x][y] } } }[-> p { -> x { x } }][-> p { -> x { x } }]]]
}][m] } }[m][n]][n]][x] }][-> p { -> x { x } }] } } }][n][-> m
{ -> n { n[-> m { -> n { n[-> n { -> p { -> x {
p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p {
-> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]][x]
}]][-> f { -> x { f[-> y { x[x][y] }] }[-> x { f[-> y {
x[x][y] }] }] }[-> f { -> m { -> n { -> b { b }[-> m {
-> n { -> n { n[-> x { -> x { -> y { y } } }][-> x {
-> y { x } }] }[-> m { -> n { n[-> n { -> p { p[-> x {
-> y { x } }] }[n[-> p { -> x { -> y { -> f { f[x][y] } }
}[-> p { p[-> x { -> y { y } }] }[p]][-> n { -> p { ->
x { p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]]
}][-> x { -> y { -> f { f[x][y] } } }[-> p { -> x { x }
}][-> p { -> x { x } }]]] }][m] } }[m][n]] } }[n][m]][-> x {
f[-> m { -> n { n[-> n { -> p { p[-> x { -> y { x } }]
}[n[-> p { -> x { -> y { -> f { f[x][y] } } }[-> p {
p[-> x { -> y { y } }] }[p]][-> n { -> p { -> x {
p[n[p][x]] } } }[-> p { p[-> x { -> y { y } }] }[p]]] }][->
x { -> y { -> f { f[x][y] } } }[-> p { -> x { x } }][-> p
{ -> x { x } }]]] }][m] } }[m][n]][n][x] }][m] } } }][n][-> m {
-> n { n[-> m { -> n { n[-> n { -> p { -> x {
p[n[p][x]] } } }][m] } }[m]][-> p { -> x { x } }] } }[-> p {
-> x { p[p[x]] } }][-> p { -> x { p[p[p[p[p[x]]]]] } }]]] }
}][n]]]] }]

Other books

Finding A Way by T.E. Black
Rosebush by Michele Jaffe
Conspiracy of Silence by S. T. Joshi
Floating Ink by James Livingood
Killing Chase by Ben Muse
The Gypsy Duchess by Nadine Miller