McCal Document

McCalは、数式の自然表示機能を備えたプログラム関数電卓アプリです。 日本の関数電卓上位機種ユーザが違和感なく使える事はもちろん、Androidならではの機能を目標にしています。

主な特徴は:

RPN (Reverse Polish Notation)方式ではありません。

McCal-liteは、McCalの無料版です。もしお役にたちそうでしたら、McCalの購入をお願い申し上げます。より多くの便利な機能が使えます。

オンラインでより判りやすい説明を読むことができます。このGetting Startedページを読みながら、実際にMcCalを操作してみることをお勧めします。

*エクセルは、マイクロソフト社の登録商標です。

目次

1章   Getting Started
  1.1  まずは四則演算と式の編集
  1.2  関数と入力ボックス
  1.3  変数
  1.4  複文
  1.5  McCal Viewerとマクロ機能
  1.6  ループ・条件分岐とコードブロック
  1.7  配列
  1.8  まとめ
2章   操作方法の詳細(オンライン)
  2.1  変数の型
  2.2  キーの説明
  2.3  コードブロックと総和関数 Σ
  2.4  コードブロックさらに
  2.5  繰り返し関数
  2.6  変数のスコープ
  2.7  ログ機能
  2.8 McCalとMcCal-liteの違いについて
  2.9 免責事項

 

1. Getting Started

McCalを立ち上げると、関数電卓らしい画面が現れます。画面上部に表示ウィンドウが、残りの大部分にキーが格子状に配置されます。

McCalは、数式をできるだけ自然な順に入力し、直感的に理解できるように数学的に自然な形で表示することを主眼に開発されました。 いままでの関数電卓ユーザにも、違和感のない操作方法で次のような数式をリアルタイムに描画します。

example

このドキュメントでは、キーストロークを 1 8 0 の様にラベル付きの四角で表します。つまり、この例では1,8,0のキーをこの順番で押したという事です。数字のみの場合 180 と省略することもあります。青色または赤色は、McCalのキーの色に合わせてあります。ラベル(文字)が黄色のキーは、キーボード左上の Shift を押してから該当するキーを選択した事を示します。

1.1 まずは四則演算と式の編集

それでは実際にやってみましょう。

180 ÷ 6 (答)30

を計算するには、キーパッド下方にある数字キーと四則演算子キーを 1 8 0 ÷ 6 の順番に押します。普通の関数電卓と同じです。そして最後に eval() キー(右下の赤い評価キー)を押すと、表示ウィンドウ内左上に

180 / 6 
> 30
と、入力式と答が表示されます。また表示ウインドウ内右下には清書した評価式が白抜き文字で現れます。分数表示されていることに注目してください。

McCalは、ユーザのキーストロークをプログラムコードに置き換えて記録する機能があり、これによって、履歴を管理したり修正・再計算ができる仕組みになっています。単なるキーの打鍵順を並べた物ではなく、McCal専用に開発されたスクリプト言語のソースコードを作成します。プログラミングの経験のない人には一見すると判りにくいかもしれませんが、そのかわり数式として自然に、リアルタイムに描画・清書する機能を持ちますので、直感的に理解し間違いを防ぐことができます。

表示ウィンドウのテキスト表示部分には'÷'のかわりに'/'が表示されています。これは式に使う文字コードは出来るだけアスキーコードとして定義されている文字を使う方針にしてあるためです。ソーステキスト上でキートップに刻印してある文字と異なる文字を使う例は'⇐'の代わりに'='、'×'のかわりにアスタリスク'*'があります。C, Java言語風にしてあるといえましょう。

実際、評価キー(eval)などの特殊キーと後置代入演算子を除けば、すべてソフトウェアキーボードから入力できます。場合によっては、ソフトウェアキーボードからの入力の方が簡単な場合もありますし、Version 2では文字列を扱えるようになったので、ソフトウェアキーボードを多用する機会が多いと思われます。

次に、実は計算したかったのは、sin(180÷6)だったとしましょう。 sin キーを押した後、 Hist キー(history key)を押してください。 Hist キーは、現在のカーソルの位置に過去に入力した式(この場合180÷6)を呼び込みます。

sin Hist
#sin(180/6)

Hist により呼び出された履歴'180/6'は、領域として選択されています(ここでは緑色)。従って、 Hist キーをさらに押すと、過去へ遡って置換されていきます。McCalは50個、McCal-liteは10個まで記憶できます。#sin(...)は、関数の項でまた説明します。

ここでさらに eval() キーをおすと

#sin(180 / 6)
> 0.5

となり、新しい答えが付け加えられます。 eval() キーが押されるとカーソルの位置に依存せず、最初の一行が評価の対象になります。答えは改行文字と三角記号を 付け加えて新しい行に出力されます。式と答は文字列として 管理され左上に黒字にて表示されるわけです。

カーソル・選択領域・改行・バックスペース( BS )の扱いは、テキストエディタ(あるいはワードプロセッサ)に似せてあります。キーパッド最上段にはカーソル移動キー( |← →| )があり、これらのキーと履歴機能を使えば、過去に入力した式を自由に呼び出し、修正し、再評価を行えます。

 それでは、#sin(180/2)に変更してみましょう。, を何度か押し、 カーソルを'6'の後ろに移動し、 BS を押してみてください。'6'が消えるはずです。そして 2 eval() を押せば

sin180-2

比較を出来るように、前回の結果'0.5'は残して、新しい結果('1')を付け加えています。

デフォルトでは、三角関数の引数は'度 (degree)'で解釈される設定になっています。表示ウィンドウ右上にその時の角度のモードが表示されています。ラジアンなどに変えたい場合は、Androidのmenuボタンをおして設定ウィンドウを呼び出します。Radianモードに切り替えたあと、 sin π ÷ 6 eval() を押してみてください。

McCalでは、従来の関数電卓のキー入力の方法を出来るだけ踏襲していますので、それほど混乱なく使えると思います。 以下では、電卓機能として従来と同じ部分や、ユニークな部分を見て行きましょう。

[1章目次に戻る][MilimaCode HomePage]

1.2 関数と入力ボックス

関数電卓として使うためのいろいろな関数が定義されています。円周率(π)とネイピア数(e)でさえも、それぞれの定数を返す関数として呼び出します。

例として、 π キーを押してみましょう。表示ウィンドウのテキスト部分には '#pi '、清書部分には'π'が表示されます。

 π eval()
pi-eval

McCalは、式の中に'#'が現れると、続く英数字は、それ以外の文字が現れるまで一続きの関数名であると見なします。円周率の値を返す関数'#pi'には'#'が必須です。もっとも、関数キーを押すと自動的に#が付加された関数名が現れるので、ユーザは入力する必要はありません。次の三個の式

 2  π ,  π  2 ,  2 ×  π 
2#pi 
#pi 2
2×#pi

は同じ値 6.283185... を返します。特に二番目の式では、#pi の後ろにスペース文字が入っていることがわかります。スペースが無い場合、関数名を'pi2'であると解釈していまい、定義されていないのでエラーになります。

引数が必要な関数では、括弧とカンマを使って引数を表します。

#max(3.2, 3.3)
> 3.3

この括弧とカンマをキーを入力するのは面倒ですので、'入力ボックス'という機能があります。引数を必要とする関数のキーを押すと、表示ウインドウのテキスト部分に関数名と括弧と共に、必要な引数の数に対応した'入力ボックス'が表示されるので、括弧やコンマを入力したり、引数の数を憶えておく必要はありません。また清書表示部分には入力が済んでいない引数は四角形の箱で表示されます。

平方根関数(#sqrt)と分数関数(Fraction, #frac)を例にやってみましょう。

root-exp

を計算したいとします。まず平方根関数キー(square root, #sqrt(), )を押すと、表示ウィンドウには

sqrt-root

と表示されます。次に分数を入力したいので、直ちに frac キーをおすと平方根の中の、領域選択された入力ボックスは、新しい二個の入力ボックスをもつ分数関数に置き換わり、

 frac 

sqrt-frac

と表示されます。分数関数(#frac())は、引数を二個取る関数で、それぞれ分子、分母の順にならびます。ここで、分子用の入力ボックスが自動的に選択ハイライトされています。

次に 4  +  8 と押せば分数の分子部分がおきかわり、

 4  +  8 

sqrt-frac-48

ここで分母部分の入力に移りたいので、キーボード右上の'入力ボックス移動キー'( →□ )を押すと、McCalは、次の入力ボックスを探し出し、領域選択します。

 →□ 

sqrt-bunbo

最後に分母部分を入力して eval() で計算が行われます。

1 + 2 eval()

sqrt-ans

入力途中でも清書表示が行われ、数式の入力順にできるだけ沿った上で、入力が最小のキーストロークで行われるように、この方法が採用されました。以上の手順を一度に書くと、

frac 4 + 8 →□ 1 + 2 eval()

計10手となります。分数関数については、
#sqrt( (4+8) / (1+2) )

の様に、括弧と割り算で 置き換えても同じ結果になります。どちらでも好みでかまいませんが、一般的には#frac()の方がキー入力回数は少ないようです。

McCalではこの入力ボックスを採用しているため、関数の括弧は自動的に閉じられます。一部の関数電卓のように')'で閉じることに注意する必要はなくなりますが、 その代わり括弧の外にカーソルを出す場合は、'入力ボックス移動キー'( →□ )を多用する必要があります。

[1章目次に戻る][MilimaCode HomePage]

1.3 変数

一度計算した値を保存して置く事ができれば便利です。関数電卓のメモリーに相当する機能は、McCalでは変数と呼び、英小文字一つだけの名前をつけて25個まで管理できます(注意 McCal-liteでは4個まで)。

McCalでは、' i 'を除くa~zまでの英小文字を使えます(McCal-lite ではa,b,c,k)。' i 'だけは、虚数単位として予約されており、変数としては使用できないので、25個なのです。

英小文字一つだけの変数の名前は、McCalの重要な機能の一つである数式表示機能において、代数学的慣例に従っており、直感的な理解を助けます。

変数の代入は、プログラミング言語風におこないます。まずは代入演算子'⇐'によって変数に値を代入してみましょう。

a ⇐ -2i-3

これで変数'a'に複素数の値'-3-2i'が代入されます。この式を入力するには少々面倒ですが、ゆっくり見てみましょう。

まず変数キー( Var. (Variable)。 Shift キーの右下にあります)を押して、変数名を入力するためのソフトキーボードを呼び出します。英小文字の'a'を押すと'a'が表示ウィンドウに現れます。 Var. キーの隣のが代入演算子のためのキーであり、その次に - 2 i - 3 をおせば、式のテキストの完成です。 eval() キー押し下げで'⇐'の右辺が評価され、複素数の値'-3 -2i'が表示されると共に、左辺にある変数'a'に代入されます。(注 ソフトウェアキーボードを出したままでMcCalキーを押す事も可能ですし、ソフトウェアキーボードからテキストの代入演算子'='など総てを入力してもかまいません。)

変数が保持する値の参照は単純に右辺で変数名を評価することによって行われます。McCalには、旧来の関数電卓の一部で見られる'Recall'キーはありません。たとえば、上記の代入に続けて a eval() だけで評価値として-3-2iが返されます。(代入演算子が無い式の場合、全体が右辺として評価されるので。)

a eval()
a
> -3-2i

さらに

b a × 2 eval()
b = a * 2
> -6-4i

であれば、答-6-4iが得られると共に、変数bに代入されます。

代数学的な慣例にしたがって、 × を省略することが可能です。たとえば a=-3-2i の状態で

b 2 a eval()
b = 2a 
> -6-4i
b 3 + a a eval()
3 + ab 
> 13 +24i
b ( a + 3 ) ( a - 6 ) eval()
b = (a+3)(a-6)
> -4 +18i

(注意) 演算子の優先順序があり、積は和より優先されるので先に計算されます。

さらには、この省略された掛け算は、明示的な × , ÷ より優先して計算されます。次の例では、'aa'の間の省略された掛け算の方が強く結びつけられています。明示的な掛け算、割り算は出現順に計算されます。

1 ÷ a a × b

priority

数式の清書機能により、意図しない計算をしてしまう危険はほとんどありません。

[1章目次に戻る][MilimaCode HomePage]

1.4 複文

McCalは、複数の式をセミコロンで区切り、一度に実行することもできます。セミコロンは、 (punc) を押すと現れる区切り記号のダイアログから選択するか、ソフトウェアキーボードから入力できます。次の例は、前回の計算結果(ラストアンサー)を円の半径(c)として、その半径を持つ円の面積と球の体積を求めます。

Var.  c  ⇐  Ans ; Var.  a  ⇐  π Var.  c  x2 ; Var.  b  ⇐ 4 ÷ 3 ×  π Var.  c Shift  x3

multi-1

最後の式の結果(上の例ではbに代入された値)のみ表示されます。

Print命令を使えば、中途の計算結果も表示できます(McCal-only, version 2)。先ほどの複文の面積の計算の前あたりをタッチするとカーソルが移動しますので、キーパッド上段のカーソル移動キーでカーソルの位置を微調整して、'a'の前に移動します。そして

Print

multistatement

Print命令は、McCalのキーパッドを左にスワイプするとあらわれる二番目のキーパッドの中にあります。Print命令の後ろに任意個の式をコンマで区切って 並べると順に表示します。

McCal Ver.2では、Print文の出力などをログファイルに記録し、パソコンに転送してスプレッドシートプログラムに取り込めるようになりました。詳しくは2.7章ログ機能を参照してください。

Printの最初の文字は大文字になっていることに注意してください。関数が'#'で始まるのと同じように、 大文字で始まる単語は命令・宣言のためのキーワードとして認識されます。

これらの複文は、かなり複雑になってしまいました。次節で説明するマクロ機能は、これらの複文に名前をつけて保存し、リストメニューからの選択あるいはボタン一つで呼び出せる機能です。

[1章目次に戻る][MilimaCode HomePage]

1.5 McCal Viewerとマクロ機能

McCal Viewerを使って、定数、変数、履歴(History)、マクロ(ユーザ定義の式)の四項目について、閲覧・管理したり McCalに呼び込むことができます。この機能は、McCal-lite には備わっていません。代わりにMcCal-liteでは、履歴と変数をそれぞれ表示ウィンドウにプリントすることができます。

McCal Viewerを起動する機能は、 Var. Hist Mac のキーのShift位置にマップしてあります。それぞれが、McCal Viewerの4つのタブビュー(Const., Var., History, Macro)を起動しますが、どれか一つ で起動した後、タブを選択して切り替える事も可能です。

タブの下の各項目は、スワイブによって上下にスクロールでき、項目の一つをタップすると、希望の操作を尋ねるダイアログがひらきます。History, Macroタブでは、数式を清書して表示できますので、直感的に目的の式を探し出せます。

viewer

定数(Const.)タブは、すでに定義してある定数以外にも、ユーザが定数を定義できます。画面右下の'Add an item'ボタンを押すと、入力のためのダイアログがあらわれます。

 

viewer-var

変数(Var.)タブは、変数とその値のリストを表示します。変数をタップすると、その変数名がメインプログラムのカーソル位置に貼付けられます。変数に配列が設定されている場合、タップすると配列の各要素が表示されます。配列(array)に関しては、後述します。

Viewer-history

履歴(History)タブは、過去の入力した式とその計算結果のリストを表示します。数式は清書して表示されていますので、直感的に目的の式を探し出せます。

viewer-macro

一方、ユーザ定義の算術式の置き場であるマクロタブ(Macro)には、履歴(History) の項目をタップして、式をマクロタブに移すことで、登録します。

マクロ機能によって、キーストロークを大幅に軽減できるマクロ機能を実現しています。Macro tabの下の項目を選びMcCalに算術式をはりつけると(Paste)、その式をMcCalは記憶しますので、 Mac キーによって最後に呼び出したプログラムコードを何度でも再実行できます。次の例でマクロ機能を使ってみます。

以下の図のような、抵抗とコンデンサからなる回路に正弦波電源をつないだ場合、コンデンサにかかる電圧(Vc)を、いろいろな周波数について計算したいとします。理論的には、Vcは図中の式の様にインピーダンスを複素数で表して計算できます。(導出の詳細はMcCalと関係在りませんので、省略します)

circuit

まず、周波数 f = 2000Hzの時は...

 f  ⇐  2000  ;  c  ⇐  1 Exp  -  8  ;  r  ⇐  5 Exp  3  ;  v  ⇐ frac  10  →□   1  +  i  2  π  f  c  r  circuit2k

この例では、最後の電圧の計算で直接数値を使う代わりに変数を使い、マクロの式が一目で理解しやすいようにしています。式を評価したあと、得られた複素数の答を極座標変換すると( Shift i によってダイアログをよびだし、[to r, θ] を選択し次にAnsを押します)、以下の図のようにコンデンサにかかる電圧の振幅と位相が得られます。

[to r, θ]Ans eval()

circuit-polar

評価式は履歴タブに登録されていますので、これをマクロタブに登録します。履歴タブの下の該当する項目をタップすると、ダイアログが現れます。下の例では2000Hzの代わりに入力ボックスを使った式をマクロタブに登録しました。これによってパラメータが必要な場所で、ユーザに入力を促すことができます。一度McCal-ViewerからMcCalに式をペーストすると、次回からは、マクロキー( Mac )を押すだけで式を呼び出せます。

circuit-macro

入力ボックスは、画面左上の閉じ括弧キー ) のShift部分にマップしてある、区切り記号(Punctuation Marks)ダイアログから入力できます。 入力ボックスが残ったままの式を eval() キーで評価すると評価エラーを起こしますが、履歴には記憶されますので、履歴タブからマクロタブに移してください。

[1章目次に戻る][MilimaCode HomePage]

1.6 ループ・条件分岐とコードブロック

同じ計算を何度も繰り返したい場合があります。例えば前節の電気回路で、いくつもの周波数の値に対して電圧(Vc)を求める場合など。McCalは、マクロキー以外にも手軽に繰り返し計算を行うための関数を備えています。 この節での説明は、McCal Version 2で導入された機能を使っています。McCal-liteでは現在のところ、サポートされていません。

まずは、無限繰り返し関数を使ってみます。McCalのキーパッドを左へスワイプすると、比較演算子や新規の関数用のキーが並んだ2番目のキーボードが現れます。無限繰り返し関数#loop (infinite loop 無限ループ、から命名されています)を選びます。

 loop 

times

テキスト表示は #loop({■}), 描画表示は上の通りです。ここでloop関数の引数が波括弧で括られています。McCalでは、これをコードブロックと呼び、一連の操作(複文)を関数の引数として渡すことができます。 loop関数は、引数のコードブロックを無限回実行しますが、一回ごとにループを継続するか尋ねます。また変数'k'を特別扱いし、コードブロックを実行毎に'k'の値を0から始まり1ずつ増して行きますので、何度目の実行かプログラム内で参照できます。

前節の電子回路の計算を例に取り、複数の周波数に対して何回か計算を繰り返してみます。

 loop   Shift  Mac 

infi-voltage

McCalViewerから、前節のマクロをペーストすると上の図のようになり、

ループ内部での入力には、単なるテキスト置換である入力ボックスは使えませんので、入力関数'#input()'を使います。

 input   f 

この関数は評価時に引数の文字列を表示した後、 ユーザの入力を待ちます。ユーザが値を入力し、 eval() キーを押すと、その値を評価して返します。この例では、返り値を変数'f'に代入しています。上の例では、変数c, rは、単純化のため、ループの外に出しました。

eval()  2000  Cont.

loop_vol3

loop関数は、 コードブロックの最後の式の評価値を表示して一度停止し、ループを継続するか尋ねてきます。この時、 Cont. で継続、 Break でループを脱出します。Continueの後ろの括弧の中の値は、継続する場合のカウンタ変数kの値です。 また、 eval() キーや、サブキーボードのBreakキーが変化していることに注意してください。

計算結果は、ログ機能をオンにしておくとファイルとして記憶され、CSV形式でメールに添付してパソコンに転送できます。詳しくは、2.7章ログ機能を参照してください。

McCalは、loop関数以外にも幾つかのフロー制御を実現出来る関数を備えています。詳しくは2章で解説します。これらの関数は複文内で 短い処理を行う事を想定して実装されています。もう少し長い、複数行にわたる関数をユーザが定義できる機能は実装中です。

#if 条件分岐。 #if(condition, {then_clause}, {else_clause}); McCal-only.
#while 与条件下での繰り返し。#while({condition}, {main_body}); McCal-only.
#times 指定された回数の繰り返し。#loopと異なり、ループ毎に停止しません。#times(how_many, {main_body}); McCal-only.
#sigma(Σ) 総和関数。#sigma(start, end, {main_body});
#repeat 汎用的な繰り返し。 #repeat(start, end, {initializer}, {main_body}, {finalizer});

これらの関数の使用例は、2.3章コードブロックと総和関数〜2.5章変数のスコープを参照してください。

[1章目次に戻る][MilimaCode HomePage]

1.7 配列

配列を使うには、Dim宣言文で特定の変数を配列として宣言します。

Dim a[20]
Dim b[10][10], c
配列の添字は0から始まります。一番目の例では、a[0] ~ a[19]までの配列が使えます。二番目の例では多次元配列を宣言しています。配列の各要素には、実数・複素数・文字列の値を代入できます。

配列の使用はAndroidのメインメモリを消費します。現在の所、500個までの制限をかけてあります。多次元配列でも総数は500個までです。また多次元配列も現在は3次までです。

ある変数名を配列でない普通の数として使いたい時は、二番目の例のように、Dim文の中でカギ括弧のない変数名を宣言し直します。配列のデータは失われますので注意してください。

関数の中でローカル変数を宣言するLocal文でも配列を宣言できます。詳しくは2.6章スコープを参照してください

1.8 まとめ

McCalは、数式をできるだけ自然な順に入力し、直感的に理解できるように数学的に自然な形で表示することを主眼に開発されました。 いままでの関数電卓ユーザにも、違和感なく使っていただけると考えています。

McCalはユーザーの入力をプログラムコードとして記憶し、後で呼び出して変更したり、再計算できます。実際の計算評価は、この文字列に対して行っており、 McCalはスクリプト言語のインタープリタを搭載しています。

McCalでは特に、繰り返し計算を手軽に行えるように配慮されています。パソコンが普及した現代では、少し複雑なプログラムはパソコンで実行するのが当たり前になりました。Androidの電卓としてのMcCalは、10数行程度までのプログラムの実行を手軽に行うことをデザインゴールにしました。また、スプレッドシートプログラムにデータを転送する機能も持っています。詳しくは2章を参照してください。

[ページトップに戻る] [1章目次に戻る][MilimaCode HomePage]