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

第 1 3 章 プ ロ グ ラ ム の 実 行 過 程 1 . ル ー ル の 分 類

N/A
N/A
Protected

Academic year: 2021

シェア "第 1 3 章 プ ロ グ ラ ム の 実 行 過 程 1 . ル ー ル の 分 類"

Copied!
8
0
0

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

全文

(1)

第 1 3 章     プ ロ グ ラ ム の 実 行 過 程  

1 .   ル ー ル の 分 類

  ル ー ル は 、 一 般 に

< ヘ ッ ド > < 条 件 部 > ‑‑> < ボ デ ィ >. 

の 形 で 表 す こ と が で き る 。 < 条 件 部 > は な い 場 合 も あ る 。 よ っ て 、 条 件 部 の 有 無 か ら ル ー ル を 2 種 類 に 分 類 で き る 。

      ・   条 件 部 が あ る ル ー ル       ・   条 件 部 が な い ル ー ル

ま た 、 ル ー ル 中 に 出 現 す る 変 数 に 注 目 し 、 ヘ ッ ド に は 用 い ら れ て い な い 変 数 が 、 条 件 部 や ボ デ ィ に 出 現 し て い る か 否 か を 判 断 す る と 、 ル ー ル を 2種 類 に 分 類 す る こ と が で き る 。 こ の よ う に 条 件 部 や ボ デ ィ に の み 出 現 す る 変 数 を中 間 変 数と い う 。

・   中 間 変 数 が あ る ル ー ル

・   中 間 変 数 が な い ル ー ル

こ れ ら の 組 み 合 わ せ に よ り 、 ル ー ル は 次 の 4 種 類 に 分 類 さ れ る 。

・   条 件 部 が な く 、 中 間 変 数 が な い ル ー ル

・   条 件 部 が あ り 、 中 間 変 数 が な い ル ー ル

・   条 件 部 が な く 、 中 間 変 数 が あ る ル ー ル

・   条 件 部 が あ り 、 中 間 変 数 が あ る ル ー ル

ル ー ル の 意 味 を 次 節 で こ の 4 種 類 に 分 け て 説 明 す る 。

2 .   ル ー ル の 意 味  

  ル ー ル と は 、 直 感 的 に は 質 問 の 確 定 節 を 書 き 換 え る 規 則 で あ る 。 1 つ の 書 き 換 え は 1 つ の ア ト ム を ア ト ム 列 ( 0 個 以 上 、 任 意 個 ) に 直 す こ と で あ る 。 こ の ア ト ム と ア ト ム 列 の ペ ア を書 き 換 え ペ アと 呼 ぶ 。 書 き 換 え は 簡 単 化 で あ る こ と が 多 い の で 、 そ の 場 合 に は簡 単 化 ペ アと も 呼 ぶ 。 ル ー ル の 意 味 は 、 そ の ル ー ル に よ っ て 可 能 な 書 き 換 え ペ ア ( 簡 単 化 ペ ア ) 全 体 の 集 合 で あ る 。 こ の こ と に つ い て 、 例 を 用 い て 説 明 し よ う 。

(2)

(1)  条 件 部 が な く 、 中 間 変 数 が な い ル ー ル

  リ ス ト の 最 後 の 要 素 を 求 め る た め に 、 以 下 の ル ー ル を 用 い る こ と が で き る 。

(last (*A *B│*X) *Y) ‑‑> (last (*B│*X) *Y).  

こ の ル ー ル を 例 と し て 、 条 件 部 が な く 、 中 間 変 数 が な い ル ー ル の 意 味 を 説 明 す る 。 例 え ば 変 数 *A、*B、*X、*Y に 対 し て 、 そ れ ぞ れ 1 、 2 、(3)、*Z を 代 入 す る と 、 ル ー ル は 次 の よ う に 具 体 化 さ れ る 。

(last (1 2 3) *Z ) ‑‑>(last (2 3) *Z ). 

こ の ル ー ル か ら 、 次 の 簡 単 化 ペ ア を 得 る こ と が で き る 。

(last (1 2 3) *Z ) ⇒  (last (2 3) *Z ). 

こ れ は ア ト ム (last (1 2 3) *Z ) を 、 ア ト ム (last (2 3) *X) に 置 き 換 え て よ い こ と を 意 味 す る 。 同 様 に 代 入{ *A/a , *B /b , *X /(c d e), *Y/*Z }を 行 う と 、 ル ー ル は 具 体 化 さ れ て 次 の 簡 単 化 ペ ア を 得 る 。

(last (a b c d e) *Z ) ⇒  (last (b c d e) *Z ). 

 

こ の よ う に 、 ル ー ル に い ろ い ろ な 代 入 を 施 す こ と に よ り 、 さ ま ざ ま な 簡 単 化 ペ ア が 得 ら れ る 。 上 記 の ル ー ル の 意 味 と は 、 そ の よ う に し て 得 ら れ る 簡 単 化 ペ ア 全 体 の 集 合 で あ る 。

(2) 条 件 部 が あ り 、 中 間 変 数 が な い ル ー ル  

  リ ス ト の 要 素 の 最 大 値 を 求 め る た め に 、 以 下 の ル ー ル を 用 い る こ と が で き る 。

(maxlist (*A *B│*X) *Y),{(> *A *B)} ‑‑> (maxlist (*A│*X) *Y).    

 

こ の ル ー ル を 例 と し て 、条 件 部 が あ り 、中 間 変 数 が な い ル ー ル の 意 味 を 説 明 す る 。変 数 *A、

*B、*X、*Y に 対 し て 、そ れ ぞ れ 5 、3 、(7 2 1)、*Z を 代 入 す る と 、ル ー ル は 次 の よ う に 具 体 化 さ れ る 。

(maxlist (5 3 7 2 1) *Z ),{(> 5 3)} ‑‑> (maxlist (5 7 2 1) *Z ).   

条 件 部 (> 5 3) が 真 で あ る の で 、 次 の 簡 単 化 ペ ア を 得 る こ と が で き る 。 (maxlist (5 3 7 2 1) *Z ) ⇒  (maxlist (5 7 2 1) *Z ).   

(3)

  一 方 、こ の ル ー ル の 変 数 に 対 し て 、代 入{ *A/4,  *B/9,  *X/(5 8 3),  *Y/*Z}を 行 う と 、 ル ー ル は 次 の よ う に 具 体 化 さ れ る 。

(maxlist (4 9 5 8 3) *Z ),{(> 4 9)} ‑‑> (maxlist (9 5 8 3) *Z ). 

し か し 、 条 件 部 (> 4 9) が 偽 の た め に 、 簡 単 化 ペ ア は 得 ら れ な い 。

上 記 の ル ー ル の 意 味 と は 、 ル ー ル に 代 入 を 施 し 、 条 件 部 が 真 の と き に 作 ら れ る 簡 単 化 ペ ア 全 体 の 集 合 で あ る 。

(3) 条 件 部 が な く 、 中 間 変 数 が あ る ル ー ル  

  リ ス ト の 長 さ を 求 め る た め に 、 以 下 の ル ー ル を 用 い る こ と が で き る 。

(length (*A│*X) *Y) ‑‑> (length *X *Y2),(:= *Y1 (+ 1 *Y2)).  

 

こ の ル ー ル を 例 と し て 、 条 件 部 が な く 、 中 間 変 数 が あ る ル ー ル の 意 味 を 説 明 す る 。 こ の ル ー ル の 変 数 に 対 し て 、 代 入{*A/2,  *X/(3 5 1 6),  *Y/*Y1,  *Y1/*Y2} を 行 う と 、 ル ー ル は 具 体 化 さ れ 、 次 の よ う な 簡 単 化 ペ ア が 得 ら れ る 。

 

(length (2 3 5 1 6) *Y) ⇒  (length (3 5 1 6) *Y1),(:= *Y (+ 1 *Y1)).  

*Y1 は 3 5 1 6 の 長 さ を 保 持 し 、 後 の 1 を 足 す 計 算 に 渡 す た め に 使 わ れ る の で 、 変 数 で な け れ ば な ら な い 。ま た 、そ れ が 他 の 変 数 、例 え ば*Yと 同 じ も の で あ る と 、明 ら か に 矛 盾 が 生 じ て し ま う の で 、 他 の 変 数 と 重 複 し な い 変 数 を 使 う 必 要 が あ る 。

こ こ で 重 要 な の は 、ヘ ッ ド に 出 現 す る 変 数 に は 、任 意 の 項 を 代 入 で き る が 、中 間 変 数( こ の ル ー ル で は *Y1 の こ と で あ る ) に は 変 数 し か 代 入 で き な い と い う こ と で あ る 。 例 え ば 、 代 入{ *A/a , *X/(b c ), *Y/*Z , *Y1/3}を 行 う と 、 ル ー ル は 次 の よ う に 具 体 化 さ れ る 。

(length (a b c) *Z ) ‑‑> (length (b c) 3),(:= *Z  (+ 1 3)). 

し か し 、 こ れ は 「 誤 っ た 具 体 化 」 な の で 、 簡 単 化 ペ ア を 得 る こ と は で き な い 。

上 記 の ル ー ル の 意 味 は 、「 中 間 変 数 に は 、( 他 の 変 数 と 重 複 し な い ) 変 数 し か 代 入 で き な い 」 と い う 制 限 の も と で 得 ら れ る 簡 単 化 ペ ア 全 体 の 集 合 で あ る 。

(4)  条 件 部 が あ り 、 中 間 変 数 が あ る ル ー ル  

  リ ス ト か ら 偶 数 の 要 素 の 出 現 回 数 を 求 め る た め に 、以 下 の ル ー ル を 用 い る こ と が で き る 。

(even̲appear (*A│*X) *Y),{(even *A)} ‑‑> (even̲appear *X *Y1),(:= *Y (+ 1 *Y1)). 

(4)

こ こ で 、 条 件 部 を 計 算 す る た め の ル ー ル は 次 の よ う に 与 え ら れ て い る も の と す る 。

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

こ の ル ー ル を 例 と し て 、 条 件 部 が あ り 、 中 間 変 数 が あ る ル ー ル の 意 味 を 説 明 す る 。 例 え ば 代 入{*A/2,  *X/(3 5 8),  *Y1/*Z1,  *Y/*Z}を 行 う 。*Z は 中 間 変 数 な の で 、 他 に 出 現 し な い 変 数 し か 代 入 で き な い こ と に 注 意 し な さ い 。 こ の 代 入 に よ っ て ル ー ル は 次 の よ う に 具 体 化 さ れ る 。  

 

(even̲appear (2 3 5 8) *Z),{(even 2)} ‑‑> (even̲appear (3 5 8) *Z1),(:= *Z (+ 1 *Z1)). 

こ の 条 件 部 (even 2) は 上 記 の ル ー ル で 計 算 さ れ て 真 と な る の で 、 次 の 簡 単 化 ペ ア を 得 る こ と が で き る 。

(even̲appear (2 3 5 8) *Z) ⇒  (even̲appear (3 5 8) *Z1),(:= *Z (+ 1 *Z1)). 

3 . プ ロ グ ラ ム の 実 行 過 程

  質 問 を 入 力 し た と き 、 計 算 機 の 中 で は ど の よ う な 計 算 が な さ れ る の だ ろ う か 。 本 章 で は 質 問 と ル ー ル 集 合 と が 作 り 出 す 計 算 の 過 程 に つ い て 説 明 す る 。

(1) yes−no判 定 問 題

(even 2) が 真 で あ る こ と を 判 定 す る た め に 、 次 の よ う な 計 算 を 行 う 。 最 初 に 、

(ans) <‑‑ (even 2). と い う 節 を 考 え る 。 こ の 節 の 意 味 は 、「 2 が 偶 数 で あ る な ら ば 、 そ れ は 答 で あ る 」 と い う こ と で あ る 。

こ の ans節 を ル ー ル に よ っ て 次 の よ う に 簡 単 化 す る 。

      (ans) <‑‑ (even 2). 

(ans) <‑‑ (:= *M (mod 2 2)),(== *M 0). 

      (ans) <‑‑ (== 0 0). 

      (ans) <‑‑. 

最 後 に 得 ら れ た 節 は 、「 無 条 件 で 、そ れ は 答 で あ る 」と 読 め る 。し た が っ て 、(even 2) は 、 正 し い こ と が わ か る 。こ の よ う に yes、no を 判 定 す る 問 題 は 、問 題 に 相 当 す る ans 節 を 作 り 、 ル ー ル で 変 更 す る こ と に よ っ て 解 決 さ れ る 。 こ の 問 題 の 簡 単 化 に は 、

        簡 単 化 ペ ア :(even 2) ⇒  (:= *M (mod 2 2)),(== *M 0). 

(5)

が 使 わ れ て い る 。

(2) ボ デ ィ ア ト ム 列 の サ イ ズ が 1 以 下 で あ る 実 行 列

例 題 と し て リ ス ト の 最 後 の 要 素 を 求 め る 問 題 を 考 え る 。 こ の 問 題 を 解 く プ ロ グ ラ ム を 以 下 の 2 つ の ル ー ル で 構 成 し た と す る 。

(last (*A *B│*X) *Z) ‑‑> (last (*B│*X) *Z).     ・・・・・・ ル ー ル A (last (*A) *Z) ‑‑> (= *Z *A).      ・・・・・・ ル ー ル B

質 問( last (1 2 3 4 5) *Y)を 入 力 す る と 、 シ ス テ ム の 内 部 に は 、 最 初 に 以 下 の よ う な ans 節 が 作 ら れ る 。最 初 に 記 述 さ れ る ans 節 を初 期 ans 節と 呼 ぶ 。こ の 初 期 ans 節 が ル ー ル で 次 々 に 変 形 さ れ て い く 。

    (ans *Y) <‑‑ (last (1 2 3 4 5) *Y). 

こ の ans 節 の 意 味 は 、( 1 2 3 4 5 ) と い う リ ス ト の 最 後 が Y で あ る な ら ば 、Y は 答 で あ る と い う 意 味 で あ る 。 最 初 に ボ デ ィ の 先 頭 に あ る ア ト ム (last (1 2 3 4 5) *Y) が 選 ば れ る 。 こ の ア ト ム に マ ッ チ す る ヘ ッ ド を 持 つ ル ー ル は ル ー ル A で あ る 。 ル ー ル A に 対 し て 、 代 入{*A/1,  *B/2,  *X/(3 4 5),  *Z/*Y} を 行 う と 、

(last (1 2│(3 4 5)) *Y) ⇒  (last (2│(3 4 5)) *Y).  

と い う 簡 単 化 ペ ア が 得 ら れ る 。そ の 簡 単 化 ペ ア に よ っ て 初 期 ans 節 は 、新 し い ans 節 に 書 き 換 え ら れ る 。

    (ans *Y) <‑‑ (last (2 3 4 5) *Y). 

次 に 、(last (2 3 4 5) *Y) が 選 ば れ 、 再 び ル ー ル A が 使 わ れ る 。

代 入 ={ *A/2, *B/3, *X/(4 5), *Z/*Y}

簡 単 化 ペ ア :(last (2 3│(4 5)) *Y) ⇒  (last (3│(4 5)) *Y). 

そ の 結 果 ans 節 は 、 以 下 の よ う に 書 き 換 え ら れ る.     (ans *Y) <‑‑ (last (3 4 5) *Y). 

さ ら に 、 リ ス ト の 長 さ が 1 に な る ま で 、 同 様 に ル ー ル の 適 用 が 繰 り 返 さ れ る 。

    (ans *Y) <‑‑ (last (4 5) *Y).  

    (ans *Y) <‑‑ (last (5) *Y).

(6)

そ し て 、 リ ス ト の 長 さ が 1 に な っ た と き 、 ル ー ル B が 適 用 さ れ る 。 簡 単 化 ペ ア :(last (5) *Y) ⇒  (= *Y 5). 

こ の 簡 単 化 ペ ア に よ っ て 、ans 節 は 次 の よ う に 書 き 換 え ら れ る.

   (ans *Y) <‑‑ (= *Y 5). 

 

こ こ で ア ト ム (= *Y 5) が 選 ば れ る 。 = は 組 み 込 み 述 語 な の で 、 こ の = ア ト ム の 計 算 は 、 シ ス テ ム で あ ら か じ め 決 め ら れ た 手 順 で 行 わ れ る 。す な わ ち*Y に 5 が 代 入 さ れ 、ア ト ム (= 

*Y 5) は 消 滅 す る 。 こ の と き ans ア ト ム 中 の*Y も 5 と な る 。 こ う し て 、ans節 は 次 の よ う に な る 。

(ans  5) <‑‑ .   

こ れ は 、 求 め る 答 え が 5 で あ る こ と が わ か る 。

(3)  ボ デ ィ ア ト ム 列 の サ イ ズ が 変 化 す る 実 行 列

  リ ス ト の 長 さ を 求 め る ル ー ル は 以 下 の よ う に 表 さ れ る 。

(length ( ) *Y) ‑‑> (= *Y 0). ・・・・・・ ル ー ル A (length (*A│*X) *Y) ‑‑> (length *X *Z),(:= *Y (+ 1 *Z)). ・・・・・・ ル ー ル B 質 問 (length (a b c) *Z)  を 入 力 す る と 、 以 下 の よ う な ans 節 が 作 ら れ る 。

  (ans *Z) <‑‑ (length (a b c) *Z). 

最 初 に (length (a b c) *Z) が 選 ば れ る 。 こ の ア ト ム に マ ッ チ す る ヘ ッ ド を 持 つ ル ー ル は ル ー ル B で あ る 。 代 入{*A/a ,  *X/(b c), *Y/*Y, *Z/*Y1} を 行 う と 、 次 の 簡 単 化 ペ ア が 得 ら れ る 。

(length (a│(b c)) *Y) ⇒  (length (b c) *Y1),(:= *Y (+ 1 *Y1)). 

そ の 結 果 、ans 節 は 以 下 の よ う に 書 き 換 え ら れ る.    

    (ans *Y) <‑‑ (length (b c) *Y1),(:= *Y (+ 1 *Y1)). 

(7)

以 下 同 様 に し て 、ans節 が 書 き 換 え ら れ る 。

(ans *Y) <‑‑ (length (c) *Y2),(:= *Y1 (+ 1 *Y2)), (:= *Y (+ 1 *Y1)). 

(ans *Y) <‑‑ (length ( ) *Y3),(:= *Y2 (+ 1 *Y3)),(:= *Y1 (+ 1 *Y2)),(:= *Y (+ 1 *Y1)). 

こ こ で 選 択 さ れ た ア ト ム (length ( ) *Y1) は ル ー ル A に マ ッ チ す る 。       簡 単 化 ペ ア :(length ( ) *Y3) ⇒  (= *Y3 0).

そ の 結 果 、ans 節 は 以 下 の よ う に 書 き 換 え ら れ る 。  

  (ans *Y) <‑‑ (= *Y3 0), (:= *Y2 (+ 1 *Y3)) ,(:= *Y1 (+ 1 *Y2)), (:= *Y (+ 1 *Y1)). 

こ の よ う に ボ デ ィ の 先 頭 の ア ト ム が 書 き 換 え ら れ る こ と に よ り 、 ボ デ ィ の 残 り の ア ト ム は ど ん ど ん た ま っ て ゆ く 。 こ こ で は (:= *Yi (+ 1 *Yj )) の 形 の ア ト ム が 蓄 え ら れ る 。 本 節 で は 蓄 え ら れ た ア ト ム を   下 線   で 示 し て い る 。

上 記 の ans 節 で は 、ボ デ ィ の 述 語 は 全 て 組 み 込 み 述 語 と な る 。組 み 込 み 述 語 を 持 つ ア ト ム は 計 算 さ れ て 消 滅 す る の で 、 こ こ か ら は ボ デ ィ ア ト ム の 数 は 順 次 減 少 し て い く 。

(ans *Y) <‑‑ (:= *Y2 (+ 1 0)) ,(:= *Y1 (+ 1 *Y2)), (:= *Y (+ 1 *Y1)). 

(ans *Y) <‑‑ (:= *Y1 (+ 1 1)), (:= *Y (+ 1 *Y1)). 

(ans *Y) <‑‑ (:= *Y (+ 1 2)). 

最 後 に (:= *Y (+ 1 2)) を 計 算 し 、*Y=3 と な り ansア ト ム の*Yも 3と な っ て 、 ア ト ム (:= *Y (+ 1 2)) は 消 滅 す る 。 そ の 結 果 、 次 の ans 節 が 得 ら れ る 。

 

  (ans 3) <‑‑.  

4 .   ル ー ル の 意 味 と 実 行 過 程  

ル ー ル は 意 味 を 決 定 し 、 そ の 意 味 に し た が っ て 実 行 さ れ る 。 こ の 全 体 像 を も う 一 度 別 の 例 で 確 認 す る 。 例 え ば リ ス ト の 要 素 の 最 大 値 を 求 め る ル ー ル は 以 下 の よ う に 表 す こ と が で き る 。

(maxlist (*A) *Z) ‑‑> (= *Z *A).        ・・・ ル ー ル A (maxlist (*A *B│*X) *Z),{(> *A *B)} ‑‑> (maxlist (*A│*X) *Z).  ・・・ ル ー ル B (maxlist (*A *B│*X) *Z),{(<= *A *B)} ‑‑> (maxlist (*B│*X) *Z). ・・・ ル ー ル C

(8)

そ れ ぞ れ の ル ー ル か ら 作 ら れ る 簡 単 化 ペ ア の 例 を 列 挙 す る 。

・ ル ー ル A

    A1  (maxlist (6) *Y) ⇒  (= *Y 6).

A2  (maxlist (3) *Y) ⇒  (= *Y 3).

A3  (maxlist (10) *Y) ⇒  (= *Y 10).

A4  (maxlist (7) *Y) ⇒  (= *Y 7).

A5  (maxlist (8) *Y) ⇒  (= *Y 8).

・ ル ー ル B

  B1 (maxlist (7 5) *Y) ⇒  (maxlist (7) *Y).

B2 (maxlist (8 4 3 2 5) *Y) ⇒  (maxlist (8 3 2 5) *Y). 

B3 (maxlist (6 1 3) *Y) ⇒  (maxlist (6 3) *Y). 

B4 (maxlist (8 7 4 9) *Y) ⇒  (maxlist (8 4 9) *Y).

B5 (maxlist (5 2 4) *Y) ⇒  (maxlist (5 4) *Y). 

 

・ ル ー ル C

C1 (maxlist (8 9 4 2 3) *Y) ⇒  (maxlist (9 4 2 3) *Y).

C2 (maxlist (6 6 8) *Y) ⇒  (maxlist (6 8) *Y).

C3 (maxlist (2 4 7 5) *Y) ⇒  (maxlist (4 7 5) *Y).

  C4 (maxlist (1 3) *Y) ⇒  (maxlist (3) *Y).

  C5 (maxlist (4 7 5) *Y) ⇒  (maxlist (7 5) *Y).

質 問 (maxlist (2 4 7 5) *Y) と い う 質 問 を 入 力 す る と 、 上 記 の 簡 単 化 ペ ア の い く つ か に よ っ て 次 の よ う な 計 算 が 起 こ る 。

(ans *Z) <‑‑ (maxlist (2 4 7 5) *Y). 

↓ 簡 単 化 ペ ア C3 が 適 用

(ans *Y) <‑‑ (maxlist (4 7 5) *Y). 

↓ 簡 単 化 ペ ア C5 が 適 用 (ans *Y) <‑‑ (maxlist (7 5) *Y). 

↓ 簡 単 化 ペ ア B1 が 適 用 (ans *Y) <‑‑ (maxlist (7) *Y). 

↓ 簡 単 化 ペ ア A4 が 適 用 (ans *Y) <‑‑ (= *Y 7). 

↓ 組 み 込 み ル ー ル に よ る 処 理 (ans 7) <‑‑ . 

参照