3.2 問合せ

エージェントに情報を保存する方法と,その情報への問合わせについて説明します.教科書p.50 "3.2 エージェントをプログラムする" の内容に相当します.

概要

%0 user user ODB_aomori ODB_aomori user->ODB_aomori Q&A about "onsen in aomori"

メッセージの流れ

useruserODB_aomoriODB_aomorirequest-informationalt[success]inform[no data]retrieve-failed[other]sorry

プログラム

ODB_aomori.groovy

class ODB_aomori extends TAG {

    def onsenlist

    def setup() {
        onsenlist = [
            [name:'湯野川温泉', type:'単純泉',         city:'川内町', point:80],
            [name:'湯坂温泉',   type:'単純硫化水素泉', city:'大畑町', point:50],
            [name:'大間温泉',   type:'食塩泉',         city:'大間町', point:30] ]
    }

    def loop(msg) {
        println msg
        if (msg._p=='request-information') {
            if (msg.name != null) {  // 温泉名による検索
                def onsen = onsenlist.find{it.name==msg.name}
                if (onsen!=null) {
                    reply(msg, [_p:'inform', name:onsen.name, type:onsen.type, city:onsen.city, point:onsen.point])
                } else {
                    reply(msg, [_p:'retrieve-faild', name:msg.name, type:'unknown', city:'unknown', point:'unknown'])
                }
                return
            } else if (msg.type != null) { // 泉質による検索
                def onsen = onsenlist.find{it.type==msg.type}
                if (onsen!=null) {
                    reply(msg, [_p:'inform', name:onsen.name, type:onsen.type, city:onsen.city, point:onsen.point])
                } else {
                    reply(msg, [_p:'retrieve-faild', name:msg.name, type:'unknown', city:'unknown', point:'unknown'])
                }
                return
            } else if (msg.point == 'max') { // 評価値による検索
                def onsen = onsenlist.max{it.point}
                reply(msg, [_p:'inform', name:onsen.name, type:onsen.type, city:onsen.city, point:onsen.point])
                return
            }
        }
        reply(msg, [_p:'sorry', msg:msg])
    }
}

動作方法

課題

  1. onsenlistに登録されていない温泉名を検索すると何が返るか調べてみましょう.
  2. どのようなメッセージを送ればsorryが返ってくるかを調べてみましょう.
  3. 所在地による検索ができるように機能拡張しましょう.