最近の更新 (Recent Changes)

2014-01-01
2013-01-04
2012-12-22
2012-12-15
2012-12-09

Wikiガイド(Guide)

サイドバー (Side Bar)


← 前のページに戻る

0.7 足し算と引き算の定義

数式の計算機能を使わないで、足し算と引き算の演算を定義しましょう。

0から10までの足し算と引き算を定義することによって演算できるようにします。

0から10までの足し算を前後の同じものを除いて定義します。 さらに引き算は足し算との論理的関係を定義することによって可能とします。


// 足し算と引き算の定義

// 和の定義。可換であるので前後の重複するものは外した。

0は0と0の和。1は0と1の和。2は0と2の和。3は0と3の和。4は0と4の和。
5は0と5の和。6は0と6の和。7は0と7の和。8は0と8の和。9は0と9の和。
10は0と10の和。2は1と1の和。3は1と2の和。4は1と3の和。5は1と4の和。
6は1と5の和。7は1と6の和。8は1と7の和。9は1と8の和。10は1と9の和。
11は1と10の和。4は2と2の和。5は2と3の和。6は2と4の和。7は2と5の和。
8は2と6の和。9は2と7の和。10は2と8の和。11は2と9の和。12は2と10の和。
6は3と3の和。7は3と4の和。8は3と5の和。9は3と6の和。10は3と7の和。
11は3と8の和。12は3と9の和。13は3と10の和。8は4と4の和。9は4と5の和。
10は4と6の和。11は4と7の和。12は4と8の和。13は4と9の和。14は4と10の和。
10は5と5の和。11は5と6の和。12は5と7の和。13は5と8の和。14は5と9の和。
15は5と10の和。12は6と6の和。13は6と7の和。14は6と8の和。15は6と9の和。
16は6と10の和。14は7と7の和。15は7と8の和。16は7と9の和。17は7と10の和。
16は8と8の和。17は8と9の和。18は9と9の和。19は9と10の和。20は10と10の和。

// 和の可換の定義

#zは#xと#yの和の場合、#zは#yと#xの和です。

// 差の定義

#xは#zと#yの和のとき、#zは#xと#yの差です。

// 質問

#zは2と3の和か?
#zは8と2の差か?

#zは2と3の差か?
#zは3と2の差か?


上記のプログラムをsamples/calc1.mrsにあるとして実行してみましょう。


$ descartes murasaki samples/calc1.mrs
#zは2と3の和か?
5は、2と3の和です。

#zは8と2の差か?
6は、8と2の差です。

#zは2と3の差か?
Undef4853は、2と3の差ではありません。

#zは3と2の差か?
1は、3と2の差です。


上記の結果で、2と3の差がうまく計算できていませんが、これは結果が-1となり、想定している範囲を超えて負の値となっているためです。

このプログラムは次に示すようなデカルト言語のプログラムにコンパイルされて実行されたものです。


 <M2 和 0 (0 0)>
        ;
 <M2 和 1 (0 1)>
        ;
 <M2 和 2 (0 2)>
        ;
 <M2 和 3 (0 3)>
        ;
 <M2 和 4 (0 4)>
        ;
 <M2 和 5 (0 5)>
        ;
 <M2 和 6 (0 6)>
        ;
 <M2 和 7 (0 7)>
        ;
 <M2 和 8 (0 8)>
        ;
 <M2 和 9 (0 9)>
        ;
 <M2 和 10 (0 10)>
        ;
 <M2 和 2 (1 1)>
        ;
 <M2 和 3 (1 2)>
        ;
 <M2 和 4 (1 3)>
        ;
 <M2 和 5 (1 4)>
        ;
 <M2 和 6 (1 5)>
        ;
 <M2 和 7 (1 6)>
        ;
 <M2 和 8 (1 7)>
        ;
 <M2 和 9 (1 8)>
        ;
 <M2 和 10 (1 9)>
        ;
 <M2 和 11 (1 10)>
        ;
 <M2 和 4 (2 2)>
        ;
 <M2 和 5 (2 3)>
        ;
 <M2 和 6 (2 4)>
        ;
 <M2 和 7 (2 5)>
        ;
 <M2 和 8 (2 6)>
        ;
 <M2 和 9 (2 7)>
        ;
 <M2 和 10 (2 8)>
        ;
 <M2 和 11 (2 9)>
        ;
 <M2 和 12 (2 10)>
        ;
 <M2 和 6 (3 3)>
        ;
 <M2 和 7 (3 4)>
        ;
 <M2 和 8 (3 5)>
        ;
 <M2 和 9 (3 6)>
        ;
 <M2 和 10 (3 7)>
        ;
 <M2 和 11 (3 8)>
        ;
 <M2 和 12 (3 9)>
        ;
 <M2 和 13 (3 10)>
        ;
 <M2 和 8 (4 4)>
        ;
 <M2 和 9 (4 5)>
        ;
 <M2 和 10 (4 6)>
        ;
 <M2 和 11 (4 7)>
        ;
 <M2 和 12 (4 8)>
        ;
 <M2 和 13 (4 9)>
        ;
 <M2 和 14 (4 10)>
        ;
 <M2 和 10 (5 5)>
        ;
 <M2 和 11 (5 6)>
        ;
 <M2 和 12 (5 7)>
        ;
 <M2 和 13 (5 8)>
        ;
 <M2 和 14 (5 9)>
        ;
 <M2 和 15 (5 10)>
        ;
 <M2 和 12 (6 6)>
        ;
 <M2 和 13 (6 7)>
        ;
 <M2 和 14 (6 8)>
        ;
 <M2 和 15 (6 9)>
        ;
 <M2 和 16 (6 10)>
        ;
 <M2 和 14 (7 7)>
        ;
 <M2 和 15 (7 8)>
        ;
 <M2 和 16 (7 9)>
        ;
 <M2 和 17 (7 10)>
        ;
 <M2 和 16 (8 8)>
        ;
 <M2 和 17 (8 9)>
        ;
 <M2 和 18 (9 9)>
        ;
 <M2 和 19 (9 10)>
        ;
 <M2 和 20 (10 10)>
        ;
 <M2 和 #z (#y #x)> <M2 和 #z (#x #y)>
        ;
 <M2 差 #z (#x #y)> <M2 和 #x (#z #y)>
        ;
? <printf '#zは2と3の和か?' <\_n>>;
? <回答 (<M2 和 #z (2 3)>)>;
? <print>;
? <printf '#zは8と2の差か?' <\_n>>;
? <回答 (<M2 差 #z (8 2)>)>;
? <print>;
? <printf '#zは2と3の差か?' <\_n>>;
? <回答 (<M2 差 #z (2 3)>)>;
? <print>;
? <printf '#zは3と2の差か?' <\_n>>;
? <回答 (<M2 差 #z (3 2)>)>;
? <print>;

本当はチャーチ数のようにしたかったのですが、とりあえず簡単に定義してしまいました。

ここからの拡張は、読者の皆様への宿題とさせてください。


--

--