• 検索結果がありません。

第 6 章 簡 単 な ル ー ル 1 . 直 接 実 行 か ら プ ロ グ ラ ム 作 成 へ

N/A
N/A
Protected

Academic year: 2021

シェア "第 6 章 簡 単 な ル ー ル 1 . 直 接 実 行 か ら プ ロ グ ラ ム 作 成 へ"

Copied!
5
0
0

読み込み中.... (全文を見る)

全文

(1)

第 6 章     簡 単 な ル ー ル

1 . 直 接 実 行 か ら プ ロ グ ラ ム 作 成 へ

  ETIに は 約 130個 の 組 み 込 み 述 語 が 備 え ら れ て お り 、組 み 込 み 述 語 を 用 い れ ば 、ETI上 で 直 接 質 問 を 入 力 し 、計 算 す る こ と が で き る 。例 え ば   [D]>(:= *X (+ 1 2)) を 実 行 す る と 、

*X が 3 に な る こ と を 第 4 章 で 確 認 し た 。し か し 、組 み 込 み 述 語 の 直 接 実 行 だ け で は 、解 け る 問 題 が 狭 い 範 囲 に 限 定 さ れ る 。 さ ま ざ ま な 問 題 を 解 く に は 、 組 み 込 み 述 語 の 直 接 実 行 だ け に 頼 る こ と な く 、 ユ ー ザ が 独 自 に 述 語 を 導 入 し 、 そ れ を 処 理 す る ル ー ル を 書 く 必 要 が あ る 。 そ れ が ET プ ロ グ ラ ミ ン グ で あ る 。 第 5 章 で は 秀 丸 エ デ ィ タ を 使 っ て 簡 単 な プ ロ グ ラ ム を 記 述 し 実 行 し た が 、 本 章 で は プ ロ グ ラ ム を 構 成 す る ル ー ル と そ の 意 味 に つ い て 、 例 題 を 用 い て 学 習 し よ う 。

2 . 簡 単 な ル ー ル の 例

(1)  仕 事 に 名 前 を つ け る

  例 え ば 、 3 の 三 乗 を 求 め る に は 、 直 接 入 力 で  [D]>(:= *X (x (x 3 3) 3))  と 入 力 す れ ば 答 *X=27 が 求 ま る 。 し か し 、 あ る 数 の 三 乗 を 繰 り 返 し 計 算 す る と き に は 、 直 接 入 力 を 繰 り 返 す よ り も 、三 乗 を 求 め る 仕 事 に 独 自 に 名 前 を 付 け て し ま え ば よ い 。例 え ば 、「 三 乗 」に 由 来 し て cube と い う 述 語 を 新 た に 作 り 、 次 の ル ー ル を 書 く 。 な お 、 ユ ー ザ 定 義 の 述 語 は 自 由 に 名 付 け る こ と が で き る が 、 そ の 際 、 他 の ユ ー ザ 定 義 述 語 や 組 み 込 み 述 語 と 重 な ら な い よ う に 注 意 す る 。 組 み 込 み 述 語 は 、ETGUI の 入 力 画 面 に(getBRules ?) と 入 力 す る と 、 そ の 一 覧 が 表 示 さ れ る の で 、そ れ を 参 照 す る 。各 組 み 込 み 述 語 の 使 い 方 に つ い て は 、ETGUI の メ ニ ュ ー の [help] – [reference manual] を 選 択 す る と 表 示 さ れ る 。

  (cube *N *X) ‑‑> (:= *X (x (x *N *N) *N)).        

意 味 :{*Nの 三 乗 が*Xで あ る と い う 条 件(cube)は 、*X= *N×*N×*Nと い う 条 件 に 置 き 換 え る こ と が で き る }

ア ト ム  (cube *N *X)は 、「*Nの 三 乗 は*Xで あ る 」 と い う 意 味 を 想 定 し て 書 か れ て い る 。 ま た 、 ア ト ム (:= *X (x (x *N *N) *N))は 「*X は*N×*N×*N で あ る 」 と い う 意 味 を 持 っ て い る 。 こ の ル ー ル を ETI に ロ ー ド す る と 、[D]>(cube 3 *X)  と 質 問 を 入 れ る だ け で 、 数

*X の 三 乗 を 計 算 し て く れ る 。 4 の 三 乗 は   [D]>(cube 4 *X)  と 入 力 す る 。 こ う す れ ば 、 [D]>(:= *X (x (x 3 3) 3))、 次 の 計 算 は   [D]>(:= *X (x (x 4 4) 4))と 、 入 力 の 数 字 を 変 え る た び に 長 い ア ト ム を 打 ち 込 む 手 間 が 省 け る 。

(2)

例   題)

  述 語 cubeに 関 す る さ ま ざ ま な 質 問 を 実 行 し な さ い 。     ア  (cube 7 *X)

イ (cube *N 125)  ウ   (cube 3 30)      エ (cube 2 8) 

ア は 7 の 三 乗 を 求 め る 質 問 で あ る 。 7 ×7 ×7 を 計 算 し*X に 代 入 で き る の で 成 功 す る 。 イ は*N の 三 乗 が 125 に な る 質 問 で あ る が 、*N×*N×*N と い っ た 変 数 同 士 の 計 算 は で き な い の で エ ラ ー と な る 。ウ は 3 の 三 乗 を 求 め て 30と の 一 致 を 調 べ る 質 問 で あ る が 、3 ×3 × 3 の 答 は 27と な り 、27=30と な ら ず 失 敗 す る 。 エ は 2 の 三 乗 を 求 め て 8 と の 一 致 を 調 べ る 質 問 で あ り 、 2 ×2 ×2 の 答 は 8 と な り 、 8 = 8 と な っ て 成 功 す る 。

(2)  計 算 結 果 を 使 っ て 、 さ ら に 計 算 す る

  例 え ば 、200円 の り ん ご を*N 個 買 い 、そ の 合 計 額 に 消 費 税 を 5 % 上 乗 せ し た 金 額*X を 求 め る 。こ の 問 題 は 、① り ん ご の 値 段 を 計 算 す る 、② 消 費 税 を 上 乗 せ し た 金 額 を 計 算 す る 、 と 二 段 階 に 計 算 す る 。 こ の と き 、payと い う 述 語 を 用 い て 次 の ル ー ル を 導 入 す る 。

  (pay *N *P) ‑‑> (:= *X (x 200 *N)),(:= *P (d (x *X 105) 100)).   

意 味 :{ り ん ご を*N個 買 っ た と き の 金 額 が*Pで あ る と い う 条 件(pay)は 、*X=200×*Nを 計 算 し 、 次 に*P= *X×105÷100を 計 算 す る と い う 条 件 に 置 き 換 え る こ と が で き る }

も し 計 算 式 の 順 序 を 逆 に し て 書 く と 、 先 に(:= *X (d (x *Y 105) 100))を 計 算 す る こ と に な る が 、 そ の 場 合*Yが 決 ま っ て い な い の で エ ラ ー と な る 。

上 記 の ル ー ル を 用 い て 計 算 を 行 う と き 、 例 え ば 、 り ん ご 5 個 を 買 っ た と き の 値 段 を 求 め る 質 問 は (pay 5 *M) で 表 さ れ 、 そ れ か ら 次 の 節 が 作 ら れ る 。

(ans *M) <‑‑ (pay 5 *M). 

こ の 節 は ans と い う 述 語 を 先 頭 ( ヘ ッ ド ) で 用 い て い る の で 、 よ り 詳 し く ans 節と 呼 ぶ こ と も あ る 。 こ の 節 は 「 5 と*M が pay の 関 係 を 満 た す な ら ば 、*M は 答 と な る 」 と い う 意 味 を 持 つ 。

こ の よ う な 節 を 、 ル ー ル を 適 用 し て 順 次 変 換 し て 、 問 題 を 次 々 と 簡 単 化 し て い く 。 こ の 過 程 を実 行 過 程と 呼 ぶ 。(pay 5 *M)と い う 問 題 に 対 す る 実 行 過 程 は 次 の よ う に な る 。

(3)

(ans *M) <‑‑ (pay 5 *M). 

変 換 :{(pay 5 *M)に ル ー ル の ヘ ッ ド(pay *N *P)が マ ッ チ す る の で 、(pay 5 *M)が (:= *X (x 200 5))(:= *M (d (x *X 105) 100))に 置 き 換 え ら れ る } (ans *M) <‑‑ (:= *X (x 200 5)),(:= *M (d (x *X 105) 100)). 

変 換 :{*X 200×5 =1000 と な り 、(:= *X (x 200 5))が 消 え る 。}

(ans *M) <‑‑ (:= *M (d (x 1000 105) 100)). 

        変 換 :{*M 1000×105÷100を 計 算 し 、*M =1050と な り 、 (:= *M (d (x 1000 105) 100))が 消 え る }

(ans 1050) <‑‑ .           

最 後 の 節 は   (ans 1050) <‑‑ で あ る 。 こ の 節 は 、「 無 条 件 」(右 辺)で 答 が 1050 と な る と い う 意 味 で あ る 。 し た が っ て 、 こ の 問 題 の 答 は 1050で あ る こ と が わ か る 。

(3)  ユ ー ザ 定 義 の 述 語 を 呼 び 出 す ル ー ル

  例 え ば 、自 然 数*N が 与 え ら れ て 、2 0 0 円 の り ん ご を「*Nの 三 乗 」個 買 っ た と き の 合 計 額 に 消 費 税 5 % を 上 乗 せ し た と き の 金 額 を 求 め る 問 題 を 考 え る 。 こ の 問 題 は 、 ①N の 三 乗 を 計 算 す る 、② 消 費 税 を 上 乗 せ し た 金 額 を 計 算 す る と い う 2 つ の ス テ ッ プ か ら 構 成 さ れ る 。 こ こ で は cal(calculation)と い う 述 語 か ら 、cube、pay(い ず れ も 先 程 の 例 題 で 記 述 し た ユ ー ザ 定 義 の 述 語)を 呼 び 出 す よ う に ル ー ル を 記 述 す る 。

  (cubepay *N *pay) ‑‑> (cube *N *cube),(pay *cube *pay). 

意 味 :{*Nを 計 算 し て 金 額 が*payで あ る 条 件(cal)は 、*Nの 三 乗 で あ る*cubeを 計 算 し(cube) そ れ に 消 費 税 を 上 乗 せ し た 金 額 で あ る*payを 計 算 す る(pay)と い う 条 件 に 置 き 換 え る こ と が で き る 。}

既 に 書 か れ て い る ル ー ル を 示 す 。

(cube *N *X) ‑‑> (:= *X (x (x *N *N) *N)). 

  (pay *N *P) ‑‑> (:= *X (x 200 *N)),(:= *P (d (x *X 105) 100)). 

 

も し 、 1 つ の フ ァ イ ル の 中 に cube と pay の ル ー ル が 既 に 記 述 さ れ て い る の で あ れ ば 、 あ と は cubepayの ル ー ル を 書 く だ け で よ い 。

こ こ で ル ー ル の 変 数 名 に つ い て 述 べ る 。cubepay の ル ー ル は(cube *N *cube)で あ る の に 対 し て 、 既 に 書 い た cube の ル ー ル は(cube *N *X)と な っ て い る 。 第 2 引 数 の 表 現 が 一 致 し て い な い が 、cubepay が cube を 呼 び 出 す の に 何 も 支 障 は な い 。 ル ー ル 中 の 変 数 は 、 代 入 に よ っ て 具 体 化 さ れ た 後 で 使 わ れ 、 そ の 代 入 は ル ー ル ご と に な さ れ 、 他 の ル ー ル と は

(4)

(4)  1 つ の 質 問 で 2 つ の 答 を 同 時 に 求 め る

  例 え ば 、 1 8 ÷4 の 商 と 余 り を 同 時 に 求 め る に は 、 計 算 結 果 を 出 力 す る 引 数 が 2 つ 必 要 に な る 。こ こ で は 割 り 算 と 剰 余 を 意 味 す る division と remainder を も と に divrem と い う 述 語 を 作 り 、 そ の 引 数 を 入 力 2 つ 、 出 力 2 つ の 計 4 つ と す る 。 す な わ ち 、

(divrem *A *B *X *Y) ・・・  *A÷*B の 商 が*X、 余 り が*Y で あ る

と 定 義 す る 。 こ れ を 処 理 す る ル ー ル は

  (divrem *A *B *X *Y) ‑‑> (:= *X (d *A *B)),(:= *Y (mod *A *B)). 

意 味 :{*A、*B、*X、*Ydivremを 満 た す と い う 条 件 は 、*X=*A÷*Bを 計 算 し 、

*A÷*Bの 余 り*Yを 計 算 す る と い う 条 件 に 置 き 換 え る こ と が で き る }

ア ト ム の 引 数 に は 入 力 や 出 力 の 区 別 は な い の で 、 こ の よ う に 複 数 の 答 を 出 力 す る こ と も 可 能 と な る 。 定 数 と 変 数 な ど は 述 語 に 対 し て 引 数 に な る こ と が で き る 。 定 数 に は 数 や 文 字 な ど が 含 ま れ る 。

こ の ル ー ル を 実 行 す る と*X を 計 算 し て 、 そ れ か ら*Y を 計 算 す る 。 そ し て 、divrem ア ト ム に 両 方 の 答 が 求 ま る こ と に な る 。 ETIで は 右 の よ う に 表 示 さ れ る 。

こ こ で ル ー ル の 書 き 方 に つ い て 述 べ る 。 1 つ の ル ー ル を 1 行 で 書 き 切 れ な い 場 合 は 改 行 し て 、 何 行 に な っ て も 構 わ な い 。 ま た 、

見 栄 え を 良 く す る た め に 意 図 的 に 改 行 し て も よ い 。 全 体 と し て 、 括 弧 が 正 し く 対 応 し て い れ ば よ い 。 た だ し 、 1 つ の 定 数 や 変 数 を 改 行 に よ っ て 分 断 し て は な ら な い 。

(5)  答 が 出 力 さ れ な い 問 題

  例 え ば 、与 え ら れ た 数*N が 偶 数 か ど う か を 判 定 す る 問 題 を 考 え る 。こ の 場 合 、計 算 結 果 を yesや noな ど の 形 で 出 力 す る プ ロ グ ラ ム :

    (even *N *X) --> (:= 0 (mod *N 2)),(== *M 0), (= *X yes). 

を 思 い 浮 か べ る か も し れ な い 。し か し ET の 計 算 で は 、条 件 の 成 功 、失 敗 自 体 が 計 算 結 果 に な る の で 、 こ の よ う に 成 功 、 失 敗 に 対 応 す る も の を 返 す 必 要 は必 ず し も 必 要 は な く 、 成 功 か 失 敗 か を 判 定 す る だ け で よ い 。

(even *N) ‑‑> (:= *M (mod *N 2)),(== *M 0). 

意 味 :{*Nが 偶 数 で あ る 条 件 は 、*Nを 2 で 割 っ た と き の 余 り*Mが 0 と 等 し く な る と い う 条 件 に 置 き 換 え る こ と が で き る 。}

[D]>(divrem 18 4   *X  * Y)

---D execution --- --- succeeded.

(divrem 18 4 4 2) execution time: 0 [msec]

(5)

  ボ デ ィ の 2 つ の ア ト ム は 、*N を 2 で 割 っ た と き の 余 り   *M   を 計 算 し て 、そ の   *M   が 0 と 等 し い か ど う か を 調 べ て い る 。 こ れ は  (:= 0 (mod *N 2)) と 1 つ の ア ト ム で 書 く こ と も で き る 。 そ れ は 、 (:=    <数 >  <式 >)  の 実 行 は 、 <式 >を 計 算 し た 結 果 と 、 <数 >を 単 一 化 す る と 定 義 さ れ て い る か ら で あ る 。 よ っ て 、 上 記 の ル ー ル は 以 下 の よ う に 簡 略 化 で き る 。    

  (even *N) ‑‑> (:= 0 (mod *N 2)). 

 

 *N に 8 を 代 入 し て 実 行 す る と 、 8 は 2 で 割 り 切 れ る の で succeeded と 表 示 さ れ る が 、

*N に 11 を 代 入 し て 実 行 す る と 、11 は 2 で 割 り 切 れ な い の で failedと 表 示 さ れ る 。こ の よ う に 、even ア ト ム に よ る 質 問 は 、 成 功 ま た は 失 敗 の 形 で 結 果 を 返 す 。

(6)  ボ デ ィ に ア ト ム が な い ル ー ル

例 え ば 、*A= *A は*A が 何 で あ っ て も 成 り 立 つ 。 そ の と き*A= *A と い う 条 件 は 削 除 し て よ い 。 削 除 と は 「 無 条 件 」 へ の 置 き 換 え な の で 、 ボ デ ィ に 何 も 書 か な い ル ー ル に よ っ て 実 現 で き る 。 無 条 件 を 意 味 す る 0 個 の ア ト ム 列 に 置 き 換 え る の で あ る 。

  (equal *A *A) ‑‑> . 

  意 味 :{*A*Aは 等 し い(equal)と い う 条 件 は 、 取 り 除 く こ と が で き る 。}

[D]>(even 11) 

---D execution ---  ---  failed. 

(:= 0 (mod 11 2)) 

execution time: 0 [msec]

[D]>(even 8) 

---D execution ---  ---  succeeded. 

(even 8) 

execution time: 60 [msec]

参照

関連したドキュメント

■ エネルギーマネジメント等への貢献 ・非常時の給電や再エネ導入時の エネマネへの活用に向け、 V2Hや外部給電器の 導入を支援..

[r]

[r]

[r]

[r]

0

また, 「時間的に変化する量」の解析だけでなく,ある量 Y が他の量 X から一定の法則で導かれるような場合には,X の変化に従って Y

[r]