Schemeで算数/数学をしてみよう。
最初に心理テストをしてみましょう。
川で子供が溺れています。助ける?助けない?
この心理テストによって、あなたが川で溺れている子供を助けるか助けないかが分かります。「助ける」を選んだあなたは、口では助けると言っておきながら、いざとなると川に飛び込む勇気のないチキン野郎です。「助けない」を選んだあなたは、人間として最低です。いや、人間と呼ぶこともはばかられます。ということで、心理テストに回答した時点で負け組なあなたは、Schemeのお勉強を頑張りましょう。
今週の土曜日は、9LISP 002です。今回の課題は、Schemeの実行環境を作ることと、Schemeの基礎をおさえること。実行環境はできていますか?まだの人は、こちらのエントリーを参考にしてください。
Schemeで四則演算
それでは、算数からはじめましょう。DrSchemeを使っている人は、エディタの下のコンソールに下のようにタイプしてください。
(+ 1 2)
はい。結果が3と表示されましたか?100と表示された人は、パソコンを買い替えた方がいいかもしれません。さて、上のプログラム(これも立派なプログラムです)の意味を説明しましょう。まずは、括弧の中身。なんとなく想像がつくでしょう?あなた、間違っていませんよ。+ 1 2というのは、1 + 2ということですね。
Schemeの場合、+は記号ではなくて関数なんです。なので、「関数 引数1 引数2」というノリですね。ノリです。それが、括弧でくくられています。これは、関数を実行しろと言っているのです。(+ 1 2)で、1 + 2を計算しろと。簡単ですね。
引数(関数に渡す値)は、+の場合、何個でもOKです。ですから、(+ 1 2 3 4)とすると、10と表示されます。36と表示された人は、目を疑ってください。このノリで、四則演算ができます。
(+ 1 2) (- 3 2) (* 3 4) (/ 6 3)
これで、四則演算は完璧です。持っている電卓をバッキバキにぶっ壊してください。
Schemeでチョイムズな算術演算
四則演算だけで世の中を渡りあるこうというのは、考えが甘すぎます。今度は、割り算の商と余りを求めてみましょう。商を求めるには、quotient関数を使います。余りを求めるには、remainderまたはmodulo関数を使います。
(quotient 5 2) (remainder 5 2)
ルートを求めるのは、sqrt関数です。
(sqrt 9)
指数関数/対数関数
指数関数は、expです。対数関数は、logです。2の10乗は下のように求めます。
(expt 2 10)
どうでしたか?ここまでに出てきた関数を組み合わせると、複雑な計算を行うことができます。例えば、(1 + 2) * (3 + 4)を計算してみましょう。
(* (+ 1 2) (+ 3 4))
先に+を実行して、最後に*を実行するノリです。ノリです。学生の皆さん、これで算数/数学の宿題もバッチリですね。ここまでの内容で疑問質問がある人は、コメント欄に書き込んでください。気分が乗ったら答えます。ウソです。できる限り答えます。むしろ、9LISP勉強会のテーマにします。
それでは、最後に心理テストをもうひとつ。赤、青、緑の3枚のカードに動物の絵が描かれています。ネコの絵が描かれているのは何色のカードですか?
正解は、青色のカードです。