†意識の記録† 理解のブログ

私の私の視点による私の経験の記録。私の視点で見る限り誤りのない認識で記事を書いている。一切の苦情は受け付けない。

論理構造式記法

2006-04-18 00:07:24 | Diary

SA式記法

logic X
{
	xxx;
	yyy;
	
}x;
ロジック(論理体)Xの構造式だ。
logicは、論理体を示す。LOGと約しても良い。
logicは、その論理体が物体であるか、それとも概念であるか、
はたまた、それが分類であるのか、何でも良い場合に使う。
logic┳struct
   ┣union
   ┗enum
上から、論理構造体(STR)、論理集合体(UNI)、論理列挙体(ENU)。
これまでは、logicをstructとして使ってきた。
論理集合体とは、複数の論理構造体や列挙体が集まった物で、分類に用いる。
あるUNIに包含される事を、“属する”という。
論理列挙体とは、共通媒介変数に用いる。
例えば、労働者なら、給与という媒介変数が考えられるが、職種によって、
持っている関数が違う。その為、給与という媒介変数を持つ列挙体を作り、
特定の職種を示す論理構造体を拡張できる。

次に、媒介変数(パラメータ)を説明する。
上記のxxxやyyyだ。
媒介変数とは、そのものの状態を示すものだ。
例えば、存在しているかいないか、動いているかいないか、などだ。
勿論、真偽2通りとは限らない。
媒介変数には、何かしらの値(データ)が入っている。
しかし、データが特定されている必要はない。
定義された時点で、すでに値を入れる事が出来る。
何も書かない場合は、obscurity又はOBS(不明瞭)が代入される。
意図的に、不明にしたい場合は、null又はNUL(無効)を代入する。
無効は、比較や論理演算をbreak(崩壊・中止)させる。
時間的に値が変化する場合は、時間変数(time)を着ける。
これは、時間添字論理子( : )を用いて書く。
又、値は列挙論理子( , )を用いて複数書ける。
又、常に最後にセミコロンを書く。これは、行末を意味する。
	xxx;
	yyy = null:t_0;
	zzz ="abcde":t_1 , "fghij":t_2;
	ppp = true:constant;
	qqq = false:t_3;
	rrr = false:t_4~t_5;
	sss = false:t_6~t_7 & t_8~t_9;
	time t = now;
こんな感じだ。
当然、媒介定数というのも存在する。
媒介常定数(常に不変な値)は、上から四番目だ。(constant又はCON)
一時定数もありえる。
媒介一時定数は、上から五~七番目だ。
論理時間や論理時刻を示す変数・定数は、time(タイム)前置子を書く。
又、nowは論理上のある時(範囲があるかないかは関係ない)を表す。
特にない場合は、nowで逃げる。

次に関数を説明する。
	func fx(logic abc){
		if(EXI == true:t)break;
		else do;
	}
	virtual vx(logic abc);
論理体は0個以上の関数を実装出来る(持てる)。
関数は、引数を0個以上取れる。
引数には、論理体、時間変数、時間定数、関数を受け取れる。
勿論、受け取らない事もある。その場合、voidと書く。
又、複数受け取る事もあり、列挙論理子( , )を用いて書く。
又、不特定数受け取る事もあり、連続引数論理子( ... )を用いて代用する。
特に、その関数自身を受け取る場合は、再帰関数と言う。
又、論理体がEXI=F:CON;である場合、仮想関数を定義できる。
仮想関数は、実行時(time)又は前提時(premiss)に定義する関数である。
仮想関数のみ、引数にobscurityを取れる。(定義時に変更される為。)
関数の細かな動作までは示す必要はなく、
doで代用できる。
つまり、“何らかの動作をする”で代用する。
ifは、条件分岐に用い、論理演算で括弧内がtrueの時に発動する。
動作をdoで代用する場合、実行条件確認に用いる事が多い。

いくつかの媒介変数や関数や時間には特別に名称があるものがある。
var 又は VAR 不特定パラメータ
name 又は NAM 名称パラメータ
existence 又は EXI 存在パラメータ
action 又は ACT 不特定関数
now 又は NOW 論理時

仮想関数の実行に関しては、
実行時か前提時に動作を決めなければならない。
logic X
{
	VAR;
	virtual ACT(OBS);
}x;

main
{
	premiss(now){
		make log = x;
		definition log.ACT(void){
			do;
		}
	}
	time(now){
		log.ACT();
	}
}
主論理(main)内に、前提(premiss)と実行(time)がある。
これは、仮想関数を前提内で定義した例である。
定義されていないものは一切使えないので、注意する必要がある。
尚、この仮想関数定義は、logという論理体のみに関連しており、
たとえ、同じ論理構造(例えばX)を持つ他の構造体には、
同名で別の動作をする関数を定義できるのである。

主論理以外にも、副論理(sub)を定義できる。
副論理は、主論理の崩壊時に論理を代用する。
例えば、以下のようなものがある。
logic X
{
	EXI;
	func ACT(logic){
		if(EXI != true)break;
		do;
	}
}x;

main
{
	premiss(now){
		make log = x;
	}
	time(now){
		log.EXI = false;
		log.ACT();
	}
	sub(now){
		if(log.EXI != true)log.EXI = true;
		return;
	}
}
明らかに崩壊してしまうのが分かる。
崩壊した場合は、副論理回路に周り、実行していく。
returnは、崩壊箇所直前に戻るという事。
他にも、continue,break,back,out,stopがある。
continue 特定の思考を再開させる。(ここでは使えない。)
break 崩壊させる。
back 実行をやり直す。
out 崩壊直後へ。
stop 特定の思考を停止させる。(ここでは使えない。)

主論理に包含されない副論理もある。
これは、同時実行に用いる。
自動的に、主論理の前提を包含している。
命令は常に一つずつ実行されるが、主、副の順で実行される。

ここまで、全て理解できているなら、
私と同じくらい理解できているだろう。
これを考えたstatic_average氏に感服する。

追記:これで全てではありません。

以上

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 前の記事へ | トップ | 次の記事へ »
最新の画像もっと見る

Diary」カテゴリの最新記事