2019-11-01から1ヶ月間の記事一覧

Simple Scheme で電卓をつくってみる(13.5)

×=等の機能をいれる前は=ボタンは演算ボタンと似たようなもの―というよりは=ボタンはget2ndと結びつけられた演算ボタンでした。 別扱いにしていたのはいずれ異なる機能を持つことがわかっていたからです。 んで、=ボタン用の関数は他の演算ボタンと同じよう…

Simple Scheme で電卓をつくってみる(13) ― メモリ機能 ―

メモリーキーを実装します。 右端にあるM+、M-、MRの3つのボタンですね。 メモリーキーは計算結果を保存し、あとで取り出せるようにするボタンです*1。 というわけでまず保存内容を保持する変数を用意します(というかすでにmemoryという名前で大分前から用…

Simple Scheme で電卓をつくってみる(12) ― 2倍、0、2乗、1 ―

加減乗除が揃い、また、エラー処理ができるようにもなりました。 加減乗除を使った機能を追加しましょう。 電卓で×=と打ち込むと、それまでの計算結果にそれまでの計算結果をかけた値―つまり「それまでの計算結果」の2乗が得られます。 ÷=だとそれまでの計算…

Simple Scheme で電卓をつくってみる(11) ―エラー処理―

Simple Schemeで電卓を作っています。割り算を組み込んで加減乗除が揃いましたが、0で割ろうとした場合の対応をまったく考えていませんでした。 0で割ろうとすると0除算エラーなので、エラー処理機構を作ります。 桁溢れエラーの処理もここでやってしまいま…

Simple Scheme で電卓をつくってみる(10) ―割り算させてみる―

加減乗除のうちまだないのは除算―割り算だけですね。割り算を組み込みましょう。 電卓の内部で数はリストで表現されていますが、リスト÷リストだと大変なのでリスト÷整数型にします。 まず具体的に割り算してみましょう。 (define (i/% x y) (let ((q (/ x y…

Simple Scheme で電卓をつくってみる(9) ―掛け算させてみる―

Simple Schemeで電卓を作っています。 掛け算を組み込みましょう。 多倍長計算します。8桁程度なら64ビット整数どうしでも桁溢れすることなく計算できますが、12桁くらいまでは対応できるようにしたいのと、表示まで考えると整数型は却ってややこしくなる部…

Simple Scheme で電卓をつくってみる(8)

さらに心理的に落ち着くために、これからしようとしている計算が足し算なのか引き算なのか掛け算なのか割り算なのかを表示するようにしましょう。 そのためには、これからしようとしている計算を表す記号を電卓の表示機構に知らせる必要があります。 まず演…

Simple Scheme で電卓をつくってみる(7.5)

単に第2引数を返すだけだと最初の数値入力で小数部分に余分な0を入れた場合、=を押しても0が残ってしまいます。別に残ってもいいのですが取り除くのもそれほど難しくありません。 (define (get2nd x y) (make-num (num-sign y) (num-i y) (rdrop0s (num-f y)…

Simple Scheme で電卓をつくってみる(7)

=を実装しましょう。 =が押されると、それまでの計算結果と最後に入力された数に対して最後の数の入力直前に押された演算ボタンの演算が適用されます*1。 演算ボタンとほとんど同じ機能ですが、=に割り当てられた演算は特にありません。というわけで基本は他…

Simple Scheme で電卓をつくってみる(6)

Simple Schemeで電卓を作っています。 足し算と引き算を実行するコードができたので電卓に組み込みましょう。 演算ボタンが押されると何らかの関数が呼び出されるわけですが、その関数は下記のmake-opで生成することにします。 (define op add) (define (mak…

Simple Scheme で電卓をつくってみる(5.7)

前回は電卓内で実行される計算の内、加減算の具体的なやり方を決めました。 電卓内で実際に保持される数はリスト型ではなくnum型です。なので、前回のコードを利用してnumの加減算を定義しましょう。 numは整数部分と小数部分をリストで保持するstructureで…

Simple Scheme で電卓をつくってみる(5.3)

多倍長計算で加減算を行う関数を定義しましょう。 桁ごとに足してから繰り上がり、という順序で処理します。 桁ごとに足すためにmap2を定義します*1。 (define (map2 f l1 l2) (build-list (length l1) (lambda (i) (f (list-ref l1 i) (list-ref l2 i))))) …

Simple Scheme で電卓をつくってみる(5)

数を入力できるようになりました。 入力した数は、整数部分と小数部分をそれぞれトップレベル変数で保持するようになっています。画面に表示するときはこれらの変数から直接数値を取り出してイメージに変換して表示しています。 しかし、この方法では入力し…

Simple Scheme で電卓をつくってみる(4)

Simple Schemeで電卓を作っています。データ保持の方法が一応決まったので実装しましょう。 整数部分と小数部分を表すリストを暫定的にトップレベル変数にバインドしておきます。 電卓で数値を入力すると、このリストに数値が追加されていくようにしたいわけ…