はじめに
サンプルプログラムを掲載いたします。
ただし、実装途中です。
動作環境について
以下の環境で動作確認しています。
1.OS X 10.8.2 + Xcode 4.5.1
2.Windows7 32bit(Home Premium) + Visual Studio 2005
注意事項
1.現時点では、時間的な問題でエラーチェックは実装しておりません。
したがって、未定義の関数等実行するとすぐアボートします。ご了承ください。
2.ソースリストからほぼコメントは削除しています。
作りかけであまりに試行錯誤が多く見苦しいためです。
ソースリスト
ソースリストはこちら。
ブラウザから閲覧し日本語部分が文字化けする場合は、ダウンロードしてください。
megumi.c
(2012/06/17追記)
Windows Visual Studioでコンパイルが通るように、一部修正しました。
また、Cとしてコンパイルしてください。
(1.メニューから[プロジェクト]-[*のプロパティ]
2.ツリーから[構成プロパティ]-[詳細]
3.右ペイン[コンパイル言語の選択]で「Cコードとしてコンパイル」を選択)
EXEファイル
Windows 専用
megumi.exe
言語仕様
配列の定義
rho
配列の定義、領域の確保、初期化
- (rho 変数名 (添字1 添字2...) [初期値 | rnd])
- (rho a (3 3)) 変数名a 3行3列の配列を作成する。
(rho mat (3 3 3) 7) 変数名mat 3x3x3の配列を初期値7で作成する。
(rho b (4) rnd) 変数名b 4列の配列を乱数で作成する。
現時点では初期値は整数しか使用できません...(数値トークン読込部未実装) - 例
Megumi ver0.1 Copyright(C) 2012 Eiji.K
> (rho a (3 3) 7)
7.000000 7.000000 7.000000 7.000000 7.000000 7.000000 7.000000 7.000000 7.000000
>
縮約
+/
配列の次元を一つ減らし配列の値を合計する。
- (+/ 変数名 変数名)
- (rho a (3 3) 7) 変数名a 3行3列の配列を初期値7で作成する。
(rho b (3) 0) 変数名b 3列の配列を初期値0で作成する。
(+/ b a) aの各行を合計し、bに結果を格納する。
現時点では結果を格納する変数を先に定義しておく必要あり。 - 例
> (rho a (3 3) 7)
7.000000 7.000000 7.000000 7.000000 7.000000 7.000000 7.000000 7.000000 7.000000
> (rho b (3))
0.000000 0.000000 0.000000
> (+/ b a)
21.000000 21.000000 21.000000
> b
21.000000 21.000000 21.000000
>
数値演算
+ - * /
配列同士の演算
- (+ 変数名 変数名)
(- 変数名 変数名)
(* 変数名 変数名)
(/ 変数名 変数名)
- (+ a b) 配列a と b を加算し、結果をa に格納する。
配列同士は同じサイズでなければならない。
現時点では結果を格納する変数を先に定義しておく必要あり。 - 例
> a
7.000000 7.000000 7.000000 7.000000 7.000000 7.000000 7.000000 7.000000 7.000000
> (rho b (3 3) rnd)
0.084035 0.154164 0.799591 0.862170 0.021943 0.239400 0.693326 0.136867 0.327648
> (* a b)
0.588245 1.079148 5.597137 6.035190 0.153601 1.675800 4.853282 0.958069 2.293536 *
>
最大値、最小値
max min
最大値および最小値の検出
- (max 変数名 変数名)
(min 変数名 変数名)
- (max a b) 配列b全体の最大値の情報を検出
- 現時点では結果を格納する4列の変数を先に定義しておく必要あり。
結果は、配列に順に
1.最大値(最小値)
2.インデックス(最大値(最小値))
3.bの次元数
4.bの次元数リストの先頭セル
- 例
> a
0.588245 1.079148 5.597137 6.035190 0.153601 1.675800 4.853282 0.958069 2.293536
> (rho result (4))
0.000000 0.000000 0.000000 0.000000
> (max result a)
6.035190 4.000000 2.000000 103.000000
> result
6.035190 4.000000 2.000000 103.000000
条件分岐 ※未実装
if
条件分岐
配列データの領域指定演算 ※未実装
サイズが異なる同士の配列の演算
プログラム例
この言語で作成する最小のSOM
- 掲載予定
参考文献
Lisp処理系の作成 (Cプログラムブック) 小西 弘一 / 清水 剛 (株)アスキー公開 2012/10/16
修正 2012/10/17