SICP 読み (211) 4.3.2 非決定性プログラムの例

問題 4.43

前提として Downing の船は Barnacle のムスメの名前で、Parker の船は Moore のムスメ、ってコトで良いのだろうか。それとも可能性は全部検討すべきなのかなぁ。

Moore    : Lorna
Downing  : Melissa Barnacle
Hall     : Rosalind
Barnacle : Gabrielle
Parker   : Mary Ann Moore

例えばこんなカンジとか??

(let ((Moore (amb 2 3 5))
      (Downing 4)
      (Hall (amb 2 5))
      (Barnacle (amb 2 3 5))
      (Parker 1))

これを 2.40 なソレ式で ... ってゆー事で検討してみる。

つづき

なんとなく微妙。属性が足らないカンジ、と言えば良いのか。可能性を数え上げてみると以下。面倒臭いので (Moore Dowing Hall Barnacle Parker) なリストで表現。

(2 4 5 3 1)
(3 4 5 2 1)
(3 4 2 5 1)
(5 4 2 3 1)

これをどうやって_制限_でフィルタするのか、が一番の問題。制限として設定しなければならないのは_Gabrielle の父親は Parker 博士の娘の名前を付けたヨットを_という部分。この制限は

  • Barnacle の船は Gabrielle なので彼は Gabrielle の父親ではない
  • Moore の娘は Mary Ann なので彼は Gabrielle の父親ではない
  • Dowing の船は Barnacle の娘の名前になっているので Gabrielle の父親ではない

という事になるんで Gabrielle の父親は Hall 又は Parker のどちらかになる。昨晩のエントリにも書きましたが Gabrielle の父親が Parker だとすると、彼の船の名前は Gabrielle でないと駄目、という事になり、これは前提に反している。

頭がテンパっとります

ちょっとこのあたり、昨晩のエントリと違うな。大丈夫かなぁ。
上記をビンゴとすると、Gabrielle の父親は Hall になります。ちょっと整理してみると以下。

  • Moore の船の名前は Lorna で彼女の父親は Dowing 又は Hall
  • Dowing の船の名前は Melissa で彼女の父親は Barnacle
  • Hall の船の名前は Rosalind で彼女の父親は Parker
  • Barnacle の船の名前は Gabrielle で彼女の父親は Hall
  • Parker の船の名前は Mary Ann で彼女の父親は Moore

ええと、Gabrielle (Barnacle の船の名前) の父親が判明した時点で Parker の娘が確定するんですが、これを制限で表現するためには属性が足らない、というのが (以下略
とほほ。今日は駄目だ。あきらめます。(弱