Hash の「A といえば B」という性質を使って、 あたかも計算機がものごとを理解したかのようにふるまうようすが、 次のようなプログラム例で理解できる。 hash_chatterbot.rb
#!/usr/koeki/bin/ruby -Ke
vocab = Hash.new
printf("何か教えてよ\n")
line = gets.chomp
if /^(\S+)(は|が|と)(\S+)(ね*|だ|よ)/ =˜ line
topic = $1
keyword = $3
end
while true
STDERR.printf("%sってなあに?\n",topic)
line = gets.chomp!
if /(\S+)(が|の|で|を|だ|も|こと|の)/ =˜ line
vocab[$1] = topic
vocab.each{|pair|
if topic == pair[1]
if vocab[topic] == nil
break
else printf("「%s」は「%s」ってことね\n",
vocab[topic],pair[1])
end
end
}
topic = keyword
keyword = $1
end
end
同じ value を持った場合に、keyword をつなげ文章にする。 同じ value を持たなければ、その value について定義を訊ねる構造になっている。
何か教えてよ 今年は豊作だね 今年ってなあに? 2011年のことだよ 豊作だねってなあに? 稲穂がたくさん実ったということだよ 2011年のことってなあに? 今年は雨が少なかったね 「今年」は「2011年のこと」ってことね 稲穂がたくさん実ったということってなあに? 豊作のことかな 「豊作だね」は「稲穂がたくさん実ったということ」ってことね 今年は雨ってなあに?