Scheme入門 第2章 計算させてみませう
やはりコンピュータたるもの、計算させてなんぼです。そうですね、手始めに 1+2 でも計算させてみましょう。1+2 は Scheme では (+ 1 2)
と書きます。
・・・妙な書き方ですね。なぜ 1+2 でなく + 1 2 なのか?これは第1章の (display "Hello,World!")
と同じ形なのです(※1)。命令は括弧で囲って、その最初に命令の名前 display
があるのでした。(+ 1 2)
もそれと同じく、命令は括弧で囲って、その最初に命令の名前 +
があるわけです(※2)。きっと +
という記号的な名前だから混乱するんですね。これが (add 1 2)
だったら、まだ解りやすい?でもまぁ Scheme では +
という名前に決まってますから、慣れるしかありません。
display
とか +
とか正式には手続き、俗には関数と言います。display
は値をコンソールに表示する手続き。+
は足し算を計算する手続きです。他にも手続きはいっぱいありますが、主な手続きはチュートリアルで順に紹介していきますので、少しずつ覚えればいいでしょう。
さて、では実際に計算させてみましょう。ただ (+ 1 2)
とするだけでは、1+2 を計算するだけで何も表示されませんから(※3)、1+2 を計算して表示までするには、display
も使って次のように書きます。
(display (+ 1 2))
実行すると、コンソールに期待通り 3
と表示されます。
+
があるのですから、-
× ÷ もあるのでは?と思うことでしょう。他のプログラミング言語の慣習から × ÷ ではなく *
/
だろうと思った貴方、その通り。このテの手続きは次のようなものが揃えられています。
+
足し算-
引き算*
掛け算/
割り算=
等しい<
より大きい>
より小さい<=
以上>=
以下
何か少し複雑な計算を・・・そうですね。1+2×(3-4÷5)でもやってみましょうか。
(display (+ 1 (* 2 (- 3 (/ 4 5)))))
実行結果は以下の通り。
27/5
27/5
って何でしょう?27月5日?(まさか。)これは 5 分の 27。分数です。先程の計算式の中に 4÷5 というのがありました。4÷5 は割り切れないので、DrScheme はこれを 4/5
という分数にします。なぜ分数?Schemeは小数(というか実数)というものを知らないのでしょうか?いや、もちろん実数を扱うことも出来ます。でも実数だと、3 で割ったりしたとき困るじゃないですか。0.33333333... よりも 1/3
の方が正確に値を表しているから。そういうわけで、整数同士の割り算は分数になります。
もちろん、あなたが分数を書いてもおっけー。
(display (+ 1/3 1/4))
実行結果:
7/12
色々計算してみませう。
第2章・完
第3章へ
※1:Schemeでは厳密な意味での他のプログラミング言語に於ける「構文」にあたるルールは実は「これだけ」である。それは、繰り返すと、全てのSchemeプログラムは
(手続き 引数1 引数2 ... 引数n)
と言う形式で書かれる、と言う事だ。それ以外はSchemeには構文らしい構文は特に存在しない。
かつ、その「引数」内には別の「式」を挿入出来る。従って、
(手続きa (手続きb (手続きc 引数c1) 引数b2) 引数a2 ... 引数an)
等として「入れ子」としてプログラムを書く、と言うのがScheme流儀。要するに「バカの一つ覚え」でどこまでも行ける、と言うのがSchemeの強みである。
※2:前置記法、またはポーランド記法と呼ばれる記述法。実は1 + 2を + 1 2 と書くのは論理学上は珍しくない。Schemeでのプログラム記述方式は論理学と言う数学と密接した分野から持ち込まれている。Schemeは前出の通り、全てのプログラムを「前置記法」で記述する、と言うのが唯一の構文である。
※3:DrSchemeでは表示される。よって
display
は特に付けなくても構わないが、この講座のスタイルでは取りあえず従っていて構わない。- DrScheme での Language Pack の選択
- Scheme の単純な式「(+ 3 2)」, 「(- 10 4)」
- Scheme の単純な式(括弧の入れ子)
- Scheme の単純な式 (DrScheme の定義ウインドウ)
- 関数 area-of-disk の定義と,関数適用
- 関数 area-of-disk,変数 PI の定義と,関数適用(1)
- 関数 area-of-disk,変数 PI の定義と,関数適用(2)
0 コメント:
コメントを投稿