simple scheme
×=等の機能をいれる前は=ボタンは演算ボタンと似たようなもの―というよりは=ボタンはget2ndと結びつけられた演算ボタンでした。 別扱いにしていたのはいずれ異なる機能を持つことがわかっていたからです。 んで、=ボタン用の関数は他の演算ボタンと同じよう…
メモリーキーを実装します。 右端にあるM+、M-、MRの3つのボタンですね。 メモリーキーは計算結果を保存し、あとで取り出せるようにするボタンです*1。 というわけでまず保存内容を保持する変数を用意します(というかすでにmemoryという名前で大分前から用…
加減乗除が揃い、また、エラー処理ができるようにもなりました。 加減乗除を使った機能を追加しましょう。 電卓で×=と打ち込むと、それまでの計算結果にそれまでの計算結果をかけた値―つまり「それまでの計算結果」の2乗が得られます。 ÷=だとそれまでの計算…
Simple Schemeで電卓を作っています。割り算を組み込んで加減乗除が揃いましたが、0で割ろうとした場合の対応をまったく考えていませんでした。 0で割ろうとすると0除算エラーなので、エラー処理機構を作ります。 桁溢れエラーの処理もここでやってしまいま…
加減乗除のうちまだないのは除算―割り算だけですね。割り算を組み込みましょう。 電卓の内部で数はリストで表現されていますが、リスト÷リストだと大変なのでリスト÷整数型にします。 まず具体的に割り算してみましょう。 (define (i/% x y) (let ((q (/ x y…
Simple Schemeで電卓を作っています。 掛け算を組み込みましょう。 多倍長計算します。8桁程度なら64ビット整数どうしでも桁溢れすることなく計算できますが、12桁くらいまでは対応できるようにしたいのと、表示まで考えると整数型は却ってややこしくなる部…
さらに心理的に落ち着くために、これからしようとしている計算が足し算なのか引き算なのか掛け算なのか割り算なのかを表示するようにしましょう。 そのためには、これからしようとしている計算を表す記号を電卓の表示機構に知らせる必要があります。 まず演…
単に第2引数を返すだけだと最初の数値入力で小数部分に余分な0を入れた場合、=を押しても0が残ってしまいます。別に残ってもいいのですが取り除くのもそれほど難しくありません。 (define (get2nd x y) (make-num (num-sign y) (num-i y) (rdrop0s (num-f y)…
=を実装しましょう。 =が押されると、それまでの計算結果と最後に入力された数に対して最後の数の入力直前に押された演算ボタンの演算が適用されます*1。 演算ボタンとほとんど同じ機能ですが、=に割り当てられた演算は特にありません。というわけで基本は他…
Simple Schemeで電卓を作っています。 足し算と引き算を実行するコードができたので電卓に組み込みましょう。 演算ボタンが押されると何らかの関数が呼び出されるわけですが、その関数は下記のmake-opで生成することにします。 (define op add) (define (mak…
前回は電卓内で実行される計算の内、加減算の具体的なやり方を決めました。 電卓内で実際に保持される数はリスト型ではなくnum型です。なので、前回のコードを利用してnumの加減算を定義しましょう。 numは整数部分と小数部分をリストで保持するstructureで…
多倍長計算で加減算を行う関数を定義しましょう。 桁ごとに足してから繰り上がり、という順序で処理します。 桁ごとに足すためにmap2を定義します*1。 (define (map2 f l1 l2) (build-list (length l1) (lambda (i) (f (list-ref l1 i) (list-ref l2 i))))) …
数を入力できるようになりました。 入力した数は、整数部分と小数部分をそれぞれトップレベル変数で保持するようになっています。画面に表示するときはこれらの変数から直接数値を取り出してイメージに変換して表示しています。 しかし、この方法では入力し…
Simple Schemeで電卓を作っています。データ保持の方法が一応決まったので実装しましょう。 整数部分と小数部分を表すリストを暫定的にトップレベル変数にバインドしておきます。 電卓で数値を入力すると、このリストに数値が追加されていくようにしたいわけ…
見た目ばかりいじってないでそろそろ電卓の計算機構を作りましょうね。 入力した数値や計算結果の保持方法を考えましょう。 桁数固定で小数点が移動するので10進の浮動小数点数がよいような気がしますが少しだけ違うのですね。 例えば1.111111と0.1111111と…
Simple Schemeで電卓を作っています。前回までで、ボタンを押したら反応するようになりました。 今度はボタンごとに異なる反応を返すようにしてみましょう。 押したボタンの上に、ボタンの文字と同じ色の円盤を重ね、その上に白抜きでボタンの文字を拡大表示…
Simple Schemeで電卓を作っています。前回はキーボードの画像を表示するところまで作りました。 続いて、ボタンをタップしたらとりあえずなにか反応を返すようにしてみましょう。 タップされたボタンの位置に黒い円盤を表示させます。 前回は画像の表示にsho…
Simple Schemeで電卓を作ります。関数電卓とかスマホに最初から入ってるようなのとかじゃなくて、普通のやつ(「普通電卓」というのですね。それを作ります )。 最初にキーボードのイメージを作りましょう。 まずはボタンのリストです*1。 (define button-l…