SICP 読み (236) 4.4.1 推論的情報検索

直前エントリの再帰なソレは微妙に gdgd だな。リトライしてみる事に。

(rule (outranked-by ?staff-person ?boss)
      (or (supervisor ?staff-person ?boss)
	  (and (supervisor ?staff-person ?middle-manager)
	       (outranked-by ?middle-manager ?boss))))

というのがルール。
直前エントリでは

(outranked-by (Bitdiddle Ben) ?boss)

とか

(outranked-by (Hacker Alyssa P) ?boss)

とか

(outranked-by (Hacker Alyssa P) (Warbucks Olyber))

とか

(outranked-by (Cratchet Robert) (Warbucks Olyber))

とか

(outranked-by ?x (Warbucks Oliver))

なんかの評価をしている模様。出力なフォーマットが多分違うし出力はこうに違いない、なソレも微妙なカンジ。ってかなんかルール自体が微妙に気持ち悪いな。あるいは or とか and のナニも微妙。
とりあえず自分勝手に or なら最初の式が真ってか満足なら終りで and なら式が偽になった時点で終わり、という事で再度。

まず最初の質問は

(outranked-by (Bitdiddle Ben) (Warbucks Oliver))

が戻る。次の質問は

(outranked-by (Hacker Alyssa P) (Bitdiddle Ben))

ですか。これって基本的にボス以外は supervisor が出て終わりじゃん。次は boss に supervisor ではない人 (ボス) が指定されている。出力としては以下か。

(outranked-by (Hacker Alyssa P) (Bitdiddle Ben))
(outranked-by (Bitdiddle Ben) (Warbucks Olyber))

うーん。上記だとすると次は以下ですか。

(outranked-by (Cratchet Robert) (Scrooge Eben))
(outranked-by (Scrooge Eben) (Warbucks Olyber))

最後のナニはどうなるんだろうか。

(outranked-by (Bitdiddle Ben) (Warbucks Oliver))
(outranked-by (Scrooge Eben) (Warbucks Oliver))

になるの??
うーん、ワケワカんねぇや。評価器できたら確認、ってコトで (こら
ってよく見ると直前エントリと何ら変化が無い。いやはや。

問題 4.57

ルールをちょっとづつ考えてみる。まず_person-1 と person-2 が同じ担当_というのは

(rule (samejob ?person-1 ?person-2)
      (and (job ?person-1 ?j)
	   (job ?person-2 ?j)
	   (not (same ?person-1 ?person-2))))

で良いのかなぁ。あるいは_person-1 の仕事をする誰かが person-2 の仕事が出来_というのは

(rule (can-do ?person-1 ?person-2)
      (and (job ?person-1 ?person-1-job)
	   (job ?person-2 ?person-2-job)
	   (can-do-job ?person-1-job ?person-2-job)))

ってコトで良いのかなぁ。same なソレは外に出すとして合わせワザとしては以下??

(rule (samejob ?person-1 ?person-2)
      (and (job ?person-1 ?j)
	   (job ?person-2 ?j)))

(rule (can-do ?person-1 ?person-2)
      (and (job ?person-1 ?person-1-job)
	   (job ?person-2 ?person-2-job)
	   (can-do-job ?person-1-job ?person-2-job)))

(rule (replace ?person-1 ?person-2)
      (and (not (same ?person-1 ?person-2))
	   (or (samejob ?person-1 ?person-2)
	       (can-do ?person-1 ?person-2))))

うーん。これで

(replace (Fect Cy D) ?x)

ってヤルと

(replace (Fect Cy D) (Bitdiddle Ben))
(replace (Fect Cy D) (Hacker Alyssa P))

になるハズ。あるいは b.な設問はキビシい。

(and (replace ?person-1 ?person-2)
     (and (salary ?person-1 ?person-1-amount)
	  (salary ?person-2 ?person-2-amount)
	  (lisp-value > ?person-1-amount ?person-2-amount)))

で良いのかなぁ。_誰かに代われて、その誰かの方が多くの給料_な二番目の誰かは、誰かを指すのか代われる人を指すのか微妙。原版を見るに上記で良いようにも思えますがどうなんだろうか。出力予想は略 (こら

問題 4.58

監督者と違う部門で仕事している人、となると

(rule (bigShot ?person)
      (and (job ?person (?division . ?type))
	   (supervisor ?person ?sv)
	   (not (job ?sv (?division . ?any)))))

こうなるのかなぁ。だんだんナチュラルなナニをぶちカマしてそうで怖い気がしてきた。