『関数プログラミング』その2

前回の続きです。またもや練習問題を解いてみました。

練習問題

(P.7)

1.2.1

式 square (square (3 + 7)) を標準形に簡約する方法をすべて示せ。

square (square (3 + 7)) => square (square (10)) <+>
                        => square (10 × 10) <square>
                        => square (100) <×>
                        => 100 × 100 <square>
                        => 10000 <×>
square (square (3 + 7)) => square ((3 + 7) × (3 + 7)) <square>
                        => ((3 + 7) × (3 + 7)) × ((3 + 7) × (3 + 7)) <square>
                        => 10 × 10 × 10 × 10 <+>
                        => 10000 <×>
square (square (3 + 7)) => square ((3 + 7) × (3 + 7)) <square>
                        => square (10 × 10) <+>
                        => 100 × 100 <square>
                        => 10000 <×>


これだけしか分からなかった。もっと、ありそうだけど。

1.2.2

定義
three x = 3
について、three(3+4) を標準形に簡約する方法はいくつあるか。

three(3+4) => three(7) <+>
           => 3 <three>
three(3+4) => 3 <three>

答えは2かな?

1.1.3

分かりませんでした。

1.1.4

有限個の0と1の並びからなる言語を考えよう。この言語で表される文字列の簡単化の規則を次のように定める。
1??x => x1101
0??x => x00
これらの規則では、変数xは0と1の任意の列を表し、記号'?'は単一の0または1を表す。つぎの式を標準形に簡約せよ。

1110
10
1110100

分かりませんでした。

どなたか、回答例を教えていただけませんでしょうか。