README for CUI CALCULATOR Mu-CALC Ver 1.8 99/5/10 H.Miura [1]はじめに Mu-CALC はCUIベースの関数電卓です。 数値計算には c 言語の double を用いています。 従って、計算精度は c の double と同じです。 内部構造は LISP の LIST 構造を模しています。 LISP の入力部と、構文解析部を変更して、数式の解釈をできるようにしてあります。 Mu-CALC の最新版は http://www2.famille.ne.jp/~miura7/mu-calc/index.html で手に入れることができます。 [2]使用条件 プログラム Mu-CALC の著作権は 三浦栄朗 にあります。 Mu-CALC は誰でも無償で使用できます。 この Mu-CALC の kit を、無償で再配布することを許可します。 有償での配布を希望する場合は、事前に連絡を願います。 このプログラムを使用して生じた結果に対して作者は責任を持ちません。 個人の責任において使用して下さい。 BUG REPORT、要望、感想 etc は e-mail にて miura7@opal.famille.ne.jp までお願いします。 [3]作成方法 gcc を用いる場合は make で O.K(のはず)。 GNU readline Library を用いた編集・履歴機能を使用する場合は、 Makefile の CC と LIB の行をコメントアウトしてあるものと入れ替えてください。 [4]使用方法 Mu-CALC をたちあげると、次のようなプロンプトを出して入力待ちになります。 ---------------------------------------- unix% calc Mu-CALC Ver 1.8 calc> ---------------------------------------- ここで数式を入力すると、計算結果を表示します。 ---------------------------------------- calc> 3+4 7 ---------------------------------------- 演算子の優先順序、カッコを考慮して計算します。 使用可能な演算子とその優先順序は次の通りで、 なるべく通常の数式表現と同じにしてあります。 優先順序 高い ! (階乗) - (単項マイナス) P (順列) C (組み合わせ) ^ (巾乗) * / % + - = (代入) == > < >= <= <>(比較) ; (結合) 低い ^ のかわりに ** も使用できます。 ---------------------------------------- calc> 1+2*(3+4) 15 ---------------------------------------- 代入演算子 = を用いて変数に値を代入する事ができます。 代入する変数の前には '(シングルクォート)をつけます。 値を代入した変数は名前で参照できます。 変数名は Alphabet ではじまり、Alphabet と数字のみからなる 31文字以内の文字列です。 Alphabet は大文字と小文字を区別します。 ---------------------------------------- calc> 'a=3 3 calc> a+1 4 ---------------------------------------- 比較演算子を用いて式の大小の判定をすることができます。 使用できる比較演算子は、 == > < >= <= <> です。 <> のかわりに != も使用できます。 判定結果が正しい時後の項の値を、正しく無い時 nil を返します。 ---------------------------------------- calc> 3 == 4 nil calc> 5 > 4 > 3 3 ---------------------------------------- 結合演算子;(セミコロン)を用いることで、 複数の式を連続して評価することができます。 その場合の全体の評価結果は、最後の式の評価結果となります。 ---------------------------------------- calc> 'a=3; 'b=4; a+b 7 ---------------------------------------- いくつかの関数をサポートしています。 現在のバージョンでサポートしている数学関数は、次の通りです。 exp log log10 sqrt sin cos tan asin acos atan hsin hcos htan abs sign round random 三角関数で用いる角度の単位はデフォルトでは radian です。 角度の単位はコマンド RAD / DEG で radian / degree を指定できます。 ---------------------------------------- calc> DEG; sin 30 0.5 ---------------------------------------- round は四捨五入による近似値を与えます。round は 2つの引数を持ちます。 第1の引数は近似する値、第2の引数は10のべき乗で表した近似する位です。 ---------------------------------------- calc> round 1.23 0 1 calc> round 1.23 -1 1.2 ---------------------------------------- 変数 PI と E はあらかじめ値を持っています。 ---------------------------------------- calc> PI 3.141593 calc> E 2.718282 ---------------------------------------- @ で直前の計算結果を参照できます。 ---------------------------------------- calc> 1+2 3 calc> @+3 6 ---------------------------------------- if を用いて、式の結果により実行を制御する事ができます。 ---------------------------------------- calc> 'x=0; if (PI == 3) ('x=1); x 0 calc> if (4 > PI > 3) 1 else 0 1 ---------------------------------------- for / while を用いて、繰り返し制御ができます。 式の評価結果は、ループの中の最後の式の評価結果です。 ---------------------------------------- calc> 'x=0; for (('i=0)(i<10)('i=i+1)) ('x=x+i) 45 calc> 'x=0; 'i=1; while (i<10) ('x=x+i; 'i=i+1); x 45 ---------------------------------------- def を用いて user 関数を定義する事ができます。 関数の定義と変数の値は、同じ場所に格納されるため、 関数名と変数名に同じものは使用できません。 ---------------------------------------- calc> def plus (x y) (x + y) plus calc> plus 3 4 7 ---------------------------------------- 数の入力には、 固定小数点 (ex 1.23) 指数形式 (ex 1.5e-5) 16進形式(整数のみ) (ex 0x1fff) が使用できます。 ---------------------------------------- calc> 1.23 1.23 calc> 1.5e-5 0.000015 calc> 0x1fff 8191 ---------------------------------------- 数の出力は、デフォルトでは固定小数点です。 コマンド FIX / EXP / HEX で 固定小数点 / 指数形式 / 16進形式 に変更できます。 16進形式では、整数部分のみが表示されます。 ---------------------------------------- calc> PI 3.141593 calc> EXP; PI 3.141592653589793e+00 calc> HEX; PI 0x3 ---------------------------------------- 1行の長さは約 250 字までです。 それより長い式を入力したい場合は2行にわけて入力します。 カッコを閉じないで改行を行うと、次の行に続けて入力する事ができます。 ---------------------------------------- calc> (1+2 calc> +3) 6 ---------------------------------------- プログラムを終了するときは quit と入力します。 ---------------------------------------- calc> quit unix% ---------------------------------------- [5]使用方法 上級編 read / print で変数の標準入力からの読み込み/標準出力への書き込みができます。 ---------------------------------------- calc> 'a=read; print a; a+1 >> 3 3 4 ---------------------------------------- 数学関数以外にいくつかのLISP関数が利用できます。 現在のバージョンで利用できる関数は、 quote eval car cdr caar cadr cdar cddr です。 quote は引数を評価(計算)しない関数です。 'f は、 quote f と書いたのと同じです。 ---------------------------------------- calc> 1 + 2 3 calc> '(1 + 2) ( 1 + 2 ) ---------------------------------------- car は cell の最初の要素を示します。 cdr は cell の最初の要素をのぞいた残りを示します。 caar cadr cdar cddr は car と cdr の組み合わせです。 例えば、cadr x は car cdr x と書いたのと同じです。 ---------------------------------------- calc> 'f='(1 + 2) ( 1 + 2 ) calc> car f 1 calc> cdr f ( + 2 ) calc> cadr f + ---------------------------------------- eval は引数を余分に評価する関数です。 変数に式を代入しておいて、eval をおこなうと、式の計算をおこなえます。 ---------------------------------------- calc> 'f='(1 + 2) ( 1 + 2 ) calc> eval f 3 ---------------------------------------- # で始まる行は、コメントとして処理され、実行されません。 ---------------------------------------- calc> # coment calc> ---------------------------------------- load / save で変数の値及び関数の定義を保存/読み込みができます。 ---------------------------------------- calc> def plus (x y) (x+y) plus calc> save plus plus calc> quit unix% calc Mu-CALC Ver 1.8 calc> load plus ( lambda ( x y ) ( x + y ) ) plus calc> plus 3 4 7 calc> ---------------------------------------- [6]使用方法 応用編 起動時の引数にファイル名を指定すると、ファイル中の式を評価できます。 1 から 100 までの素数を求めるサンプル 'sosu.clc' を評価した結果を示します。 ---------------------------------------- unix% calc sosu.clc 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 NUM 25 unix% ---------------------------------------- -c option を用いると、コマンドラインの式を評価できます。 ---------------------------------------- unix% calc -c 3+4 7 unix% ---------------------------------------- $HOME/.calcrc に Mu-CALC のコマンドを書いておくと、 起動時に読み込みます。 例えば3角関数で用いる角度の単位を default で degree にしたい場合は、 次のような 内容の .calcrc を作成します。 ---------------------------------------- # $HOME/.calcrc DEG; 'DEG ----------------------------------------