さきほどのわらしべ長者をプログラムで表してみよう。 rich.rb
#!/usr/koeki/bin/ruby
$KCODE = 'e'
rich = {"貧乏な男は転んだ" =>"わらをつかんだ",
"わらをつかんだ" => "アブが飛んできた",
"アブが飛んできた" => "わらにくくりつけた",
"わらにくくりつけた" => "おもちゃになった",
"おもちゃになった" => "赤ん坊が欲しがった",
"赤ん坊が欲しがった" => "赤ん坊はおもちゃを得た",
"赤ん坊はおもちゃを得た" => "赤ん坊は泣きやんだ",
"赤ん坊は泣きやんだ" => "みかんをもらった",
"みかんをもらった" => "喉の喝いた旅人が欲しがった",
"喉の喝いた旅人が欲しがった" => "喉の喝いた旅人は喉をうるおした",
"喉の喝いた旅人は喉をうるおした" => "反物をもらった",
"反物をもらった" => "侍が倒れた馬と反物を交換したがった",
"侍が倒れた馬と反物を交換したがった" => "反物と倒れた馬を交換した",
"反物と倒れた馬を交換した" => "倒れた馬を得た",
"倒れた馬を得た" => "倒れた馬を休ませた",
"倒れた馬を休ませた" => "馬は元気になった",
"馬は元気になった" => "元気な馬を欲しがる庄屋がいた",
"元気な馬を欲しがる庄屋がいた" => "馬を庄屋にあげた",
"馬を庄屋にあげた"=> "庄屋は旅に出た",
"庄屋は旅に出た" => "屋敷の留守を頼まれた",
"屋敷の留守を頼まれた" => "庄屋は戻って来なかった",
"庄屋は戻って来なかった" => "庄屋になった"}
for premise in rich.keys
if rich.value?(premise) == false
printf("%s。そして",premise)
end
end
for conclusion in rich.values
if rich.key?(conclusion) == false
printf("%s\n",conclusion)
end
end
結論は key, value に重複していない文字列によって構成されることを利用している。
本日の講義 / 基礎プログラミング II / 2007 年度
Madoka Nishimura <madoka@e.koeki-u.ac.jp>