ホーム » カテゴリ » ページ

はじめに

サンプルプログラムを掲載いたします。
ただし、実装途中です。 

動作環境について

以下の環境で動作確認しています。

 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