コマンドラインから実行する迅速かつ柔軟な算術計算機

 GUI操作方式の計算機はユーザフレンドリではあるが、コマンドライン愛好派のパワーユーザにとってはかえって使いにくいという側面も有している。実際コンソールベースの計算ツールとしては、bcGeniusCalcなどが存在しており、またGUI方式の計算機には見られない高度な機能を利用することもできる。

 コマンドライン操作式の計算機について考える場合、GUI操作式の計算機に装備されている機能の大部分をカバーしているのみならず、下記のような高度な機能を装備している点も評価すべきだろう。

  • インタラクティブおよび非インタラクティブ形態の実行モードが利用できる
  • スクリプト中での使用が可能であり、独自スクリプトも実行できる
  • キーボードから手を離さなくて済む分だけ効率的に操作できる
  • 各種の組み込み関数や変数計算が利用できる
  • ユーザ独自の関数や変数をその場で定義できる

 先に言及したコンソール計算機のうち完成度という点ではGeniusが最も進んでいるが(それだけ安定性も期待できる)、本稿で取り上げるCalcの方は最もユーザフレンドリな作りとなっていると同時に、平均的なユーザが必要とする以上の機能が多数装備されている。またCalcは各種ディストリビューションのリポジトリから入手でき、Windowsでも使用することができる。

 Calcの場合、manページの代わりに詳細なヘルプが/usr/share/calc/help/に用意されており、これらは通常のテキストビュワーでも表示できるがCalc本体からも閲覧可能になっている。具体的にはコマンド「calc help」を実行すればlessを介したヘルプ表示が行われるので、各自の興味のあるトピックを「calc help topic 」の構文にて指定すればいい。あるいは「calc help full」にてヘルプ全体を表示させることもできる。またCalcに関するより一般的なリソースおよび解説は/usr/share/calcに収録されている。

 Calcで使う算術演算子や基本関数は「+ - * / ^ ** %」およびsqrt(x)、sin(x)、tan(x)といった通常よく見るシンボルや名称が使われているので、これらの意味と使用法は簡単に把握できるだろう。また計算式はC言語がベースとなっており、Cスタイルのプログラミングに習熟した人間であればCalcの記述構文は大部分がお馴染みのもののはずだ(相違点もあるので詳しくは「calc help unexpected」を参照して頂きたい)。

 実際にCalcでの計算を行うには、まず最初にコマンドcalcを入力して、Calcのプロンプトであるセミコロンを表示させる。具体的にどのような計算ができるかは、下記の出力例でおおよその見当を付けられるだろう。

C-style arbitrary precision calculator (version 2.12.2.2)
Calc is open software. For license details type:  help copyright
[Type "exit" to exit, or "help" for help.]

; ## 5の2乗
; 5 ^ 2
        25
; 5 ** 2
        25
;
; ## コメント行は##で始める
; /* このタイプのコメント文も使用可能 */
;
; ## 浮動小数点での除算
; 111 / 2
        55.5
; ## 整数結果の除算
; 111 // 2
        55
;
; ## ユーザ関数の定義
; ## 以下、簡易的な関数の定義法
; define f(x) = x*2
f(x) defined
;
; ## 以下、少し複雑な関数の定義法
; define g(first, second) {
;; first -= second;
;; first ** 2;
;; first // 1.5;
;; first++;
;; print "done";
;; return first;
;; }
g(first,second) defined
;
; ## 以下、ユーザ定義関数の使用法
; ## スペースの入力は省略可
; g( f(2), 3 )
done
        2
;
; g( f(5), 1 )
done
        10
;

 引数を指定せずに起動させた場合、Calcはインタラクティブシェル上で実行される。逆に「calc 2+3」のように、計算式を直接指定した形で実行させることもできる。後者の場合は計算式の評価後にCalcも終了するが、-iオプション引数を指定しておくとインタラクティブシェルに移行するようになる。

 ユーザが定義する変数と関数のセットは、1つのリソースファイルにまとめておき(その拡張子は通常.calとする)プログラムに一括で読み込ませることもできる。リソースファイルの記述構文はインタラクティブシェルのものと同じである。ここでは、化学の授業で原子量の計算を頻繁に行うという状況を考えよう。下記のサンプルはそうした計算で使用する各種の変数、関数、コマンドをperiodic.calというリソースファイルにまとめたサンプルである。

#!/usr/bin/calc -i read

H = 1.00794
He = 4.0026
Li = 6.941
Be = 9.012182
B = 10.811
C = 12.0107
N = 14.0067
O = 15.9994
## (以下省略)

print "You are using the periodic resource for calc."

 こうしたリソースファイルの読み込みは「calc -i read periodic.cal」といった構文のコマンドで行える。あるいは「chmod +x periodic.cal」というコマンドで実行可能にしておけばリソースファイル本体を直接起動させることもできる。リソースファイルの読み込み後、そこに登録されている変数については下記のようにそのまま利用可能となる。

You are using the periodic resource for calc.
; ## 以下インタラクティブシェルにての計算例
; O
        15.9994
; C+O*2
        44.0095
;

 Linuxユーザの大半はコマンドライン一本槍ではなく、同時にXも実行させていることだろう。そうした環境にてCalcを手軽に使用するには、atermなどの仮想ターミナルを用いて「aterm -e calc」や「aterm -e calc -i read /pathtoyourresource/periodic.cal」などの構文で起動させるのも1つの方法である。また最新バージョンのCalcにはバグがあり、存在しない関数を呼び出そうとすると終了してしまう。こうした現象についてもCalcの強制終了の影響を受けないタイプのターミナル上で計算をするようにしておくと、途中まで入力したCalc用の計算式を単なる関数名のタイプミスで失う危険性などを回避することができる。

 コマンドライン愛好派のユーザであれば、電卓計算程度でGUIに切り替えたくないという人間も多いだろう。そうした場合は本稿で解説したCalcなどのアプリケーションを利用すれば、マウスに手を伸ばすことなくキーボード操作だけで電卓以上の複雑な計算を処理できるはずである。

Ben Morganはセネガルの学生で、2002年からのLinuxユーザである。

Linux.com 原文