|
太陽の画像処理プログラム(および、今後リリースするプログラム)は、スクリプト言語を搭載し、プログラム自身が持つ機能を使ってプログラミングできるようになります。 搭載されているコンピュータ言語がどんなものか、少し遊んでみましょう。 各プログラムの(今1個しかありませんが)メニューから「SystemTranscript」を呼ぶと、プログラミング言語本体のオペレーションウィンドウとなる「SystemTranscript」(訳:システム操作)が開きます。 バージョンによっても微妙な差が出るかと思いますが、おおむねこんな感じのフォームが開きます。 2008/02/21
|
ここで扱えるコンピュータ言語はFortress風の言語(サブセットあるいは方言)です。 Fortressとは、FORTRANの後継言語としてSun Microsystems主導でオープンソースによる開発中の並列処理言語です。別のコーナーで書きまくっているので、Fortressについては改めて説明しませんが、元々、科学技術計算用の言語であって、こういったクライアントアプリケーションの制御用途に使うモノではないんですが、並列処理に釣られて採用となりました。 現時点では、Fortressの規定スペックの1割も搭載しておらず、並列処理もできない有様なので、過度な期待はしないでください。なお、処理系は全く独自開発です。本物のFortressのソースコードは1バイトたりもと入っていません。 2008/03/02
|
では、動かし方とか言語の特徴を説明していきます。(システムのデバッグを兼ねておりますので、お手元のバージョンでは、この通りに動かない場合があります。) SystemTranscriptの下の部分にプログラムを入力します。
そして、do it ボタンを押します。 入力した命令と、実行結果が返されているので、その結果が表示されます。12+34=46という計算が行われ、結果の46が表示されます。
2008/02/23
|
hello, worldを表示してみましょう。 通常は、以下の4行が必要です。
さっそく実行してみましょう。 上記の4行を、>>の部分に上記のプログラムを入力し、doitボタンを押します。
通常は、こういったプログラムをテキストエディタ(メモ帳など)で書いてファイル保存し、それを実行させるというスタイルをとるのですが、なるべく親しみやすくするため、多少の長めのプログラムでも、フォームから入力してすぐに実行できるようにしてあります。 また、即時実行をよりやりやすくするため、
ということで、print命令を使って、ちょっとした計算をやってみます。 プログラムを入力してすぐ結果を確かめられるのは、わかりやすさの点で重要だと私は考えます。 以下、入力した内容を
2008/02/23
|
Fortressでは、関数と四則演算の扱いに少々癖があります。プログラムを数学のように書くので、一般的なコンピュータ言語とは式の書き方・解釈方法が少々違います。 たとえば、表示のための命令であるprint命令自体、sin関数などと同様に引数を一つ持つ関数になっています。このため、sin,cos,tanといった関数を書くときのルールと、ほぼ同じルールになります。 たとえば、12+34×56 の計算結果を知りたくて
(実行結果)
(今後のバージョンの動向によっては、エラーになるかもしれません。) 唐突ですが、 sin θ+α って、 sin(θ)+α の意味ですよね? それと同じです。print関数も、sin,cos,tanなどと同様、関数の後方に書く式は、加減算の手前までが有効になります。だから、
加算を含めた式全体「12+34*56」を計算させるには、全体を括弧で囲む必要があります。
2008/02/23
|
C言語やPascalなど、一般的な言語では、関数は
たとえば、関数fに10を与えて計算させる場合、C言語では
と書きます。sin関数も例外なく同様で
です。括弧の省略はできません。(※) ところが、Fortressでは、引数が1つの関数については括弧を省略できます。 たとえば、数学では三角関数や対数といった関数には一般に括弧は付けませんね。それと同じ書き方が可能です。(数学の先生で厳しい人になると、sin関数に無意味な括弧が付いていると怒ったりしますけどね。Fortressでは、無意味な括弧は省略できます。)
sin関数、実装してませんでした。(汗) (※)C言語で、関数の括弧の省略は文法上行えます。C言語では、関数名だけの場合は、関数へのポインタの意味になります。それに( )演算子を適用させると、その関数が呼ばれる仕組みになっています。 void main(void) { int (*p)(char *, ...); int n=5; p=printf; p("%d",n); } (…確かこれで合っていたはず。) C言語の関数にくっついている( )は、関数を示すための括弧でなく、関数を呼ぶ演算子として独立した機能を持っています。 (昔の)Pascalでは、括弧までがライブラリに登録されているので、関数名と括弧を離して書くとコンパイルエラーになったそうな。 ○ writeln(a); × writeln (a); > 2008/02/11
|
…こほん。(咳払い)
同様に、sin、cos、sqrt(平方根)なども括弧は不要です。
sin(α+β)=sin α cos β + cos α sin β 加法定理ですね。 2008/02/21
|
変数は、ある値を保管しておく箱のようなものです。 Fortressでの変数宣言は、変数の後ろにコロンを付けて、その後ろに型名を書きます。 (例)
この宣言は、変数xを、32ビット整数で宣言しています。ZZ32型は、32ビット整数(C言語で言うところのlong型に相当)です。
他の言語ではIntegerとかFloatといった表記がよく使われますが、数学で言うところのInteger(整数)は無限桁数ですから、表記可能範囲を意識させる意味で、あえてZZ32みたいな書き方をしてるんでしょうかね。個人的には気に入らないけれど。
元々画像処理ライブラリを作ろうと思って制御言語として作り始めた関係で、bitmap型、color型などを備えます。 integer型、double型、string型は、それぞれZZ32,RR64,String型として存在するので、削除するかもしれません。 では、実際に定義してみましょう。通常は、プログラムを組んだ中で指定するのですが、とりあえずSystemTranscriptから直接宣言が可能です。
※Ver.0.1では、前回のprint時の結果が結果として返されますが、気にしないでください。 2008/02/23
|
続いて、
変数xに3が代入されたかを調べます。
(実行結果)
xの4倍を計算してみます。
(実行結果)
Fortressでは、通常は乗算のために乗算の記号を必要としません。言語仕様上、乗算のための * 演算子は持っていません。(×演算子などを使います) ま、感覚的に不便なので、一応、*演算子は独自拡張してあります。そのため、他のコンピュータ言語のように*記号を乗算演算子として使う事もできるようにしてあります。
2008/03/02
|
このようにすると、文字と一緒に数値を出力できます。 賢明な皆さんであれば、この書き方の正体がわかると思います。
そうです。文字列に対して乗算の演算を行うと文字列の連結が行われます。乗算なので、print関数に括弧を付ける必要がありません。 2008/02/11
|
数値の定数を空白で区切って並べる事ができます。
このように、5桁区切りでも良いし、会計のように3桁区切りで書いても構いません。わかりやすい桁数で区切って表記できるので、誤記を減らす事ができます。 なお、定数間では空白で区切った場合については、乗算の計算は行われません。
2008/03/02
|
[戻る] |