ねずみの嫁入り

ねずみの嫁入りという昔話がある。

ある庄屋のお蔵に、ねずみが暮していた。 ねずみはとうとう美しい娘ねずみを授かった。 年頃になったので、娘のために日本一の婿を探しに旅に出た。 日本一の婿はおてんとうさまだと考え、おてんとうさまに会いに行った。 おてんとうさまはおてんとうさまより偉いものがあるという。 おてんとうさまより偉いのは、おてんとうさまを隠す雲であるという。 そこで日本一の婿は雲だと考え、雲に会いに行った。 雲は雲より偉いものがあるという。 雲より偉いのは、雲を吹きはらう風であるという。 そこで日本一の婿は風だと考え、風に会いに行った。 風は風より偉いものがあるという。 風より偉いのは、風を遮るお蔵の壁であるという。 そこで日本一の婿はお蔵の壁だと考え、お蔵の壁に会いに行った。 お蔵の壁はお蔵の壁より偉いものがあるという。 お蔵の壁より偉いのは、お蔵の壁をかじるねずみであるという。 そこで日本一の婿はねずみだと考え、ねずみを婿とした。

"こぶた、たぬき、きつね、ねこ" のような key と value がぐるぐる回るパターンである。

{こぶた => たぬき, たぬき => きつね, きつね => ねこ}

それでは実際に key と value を比較していき、物語を進行させるように してみよう。mouse.rb


#!/usr/koeki/bin/ruby

mouse = {"おてんとうさま" => ["雲","隠して"], 
  "雲" => ["風","吹き飛ばして"], 
  "風" => ["お蔵の壁","さえぎって"], 
  "お蔵の壁" => ["ねずみ","かじって穴をあけて"]}

bridegroom = "おてんとうさま"

print("ある庄屋のお蔵に、ねずみが暮していた。\n")
print("ねずみは美しい娘ねずみを授かった。\n")
print("年頃になったので、娘のために日本一の婿を探しに旅に出た。\n")
printf("日本一の婿と見込んで%sに話をした。\n",bridegroom)

while true
  if bridegroom == "ねずみ"
    break
  end
  print("親ねずみ:「娘の婿になってほしいのだが」\n")
  printf("%s: 「わたしより偉いのは%s。わたしを%sしまうから」\n",
  bridegroom,mouse[bridegroom][0],mouse[bridegroom][1])

  printf("そこで親ねずみは%sに会いに行った。\n",mouse[bridegroom][0])
  bridegroom = mouse[bridegroom][0]
end

printf("親ねずみは%sを婿とした。\n",bridegroom)

value の値を key に代入し、ある key になったところで止まる。

本日の講義 / 基礎プログラミング II / 2007 年度

Madoka Nishimura <madoka@e.koeki-u.ac.jp>
>