提问人:blekione 提问时间:4/24/2016 最后编辑:blekione 更新时间:4/24/2016 访问量:48
将操作结果与哈希图值相关联
Associate result of operation to the hashmap value
问:
我有 2 张地图:
(def look {"directions" :look
"look" :look
"examine room" :look
})
(def quit {"exit game" :quit
"quit game" :quit
"exit" :quit
"quit" :quit
})
它们通过以下方式合并为一张地图:
(defn actions [] (merge look quit))
然后我尝试将其结果(即哈希映射)关联到另一个映射的值:
(assoc {} :1 actions)
而不是预期的结果,它应该是:
{1: {"directions" :look, "look" :look ...
我收到
{:1 #object[fun_pro.core$actions 0x20a8027b "fun_pro.core$actions@20a8027b"]}
据我了解,这是对 action 对象的引用。
我应该怎么做才能获得预期的结果?我也尝试使用取消引号拼接,但我还不够先进,无法使用宏,也无法使其工作。
编辑1:
好的,看来我找到了解决方案。与其使用,不如使用 .(defn actions...)
(def actions...)
编辑2:
为了澄清我为什么使用这样的结构。
正如我在下面的评论中所说,我将使用此地图将其与用户提供的答案进行比较,以找到要使用的命令。例如,如果用户输入“show me directions”,它将触发基于关键字“directions”显示方向的功能。如果用户根据关键字“看”和“检查房间”询问“我环顾房间”或“我检查房间以找到道路”,则结果相同。
首先将用户输入拆分为一组字符串,并从我的地图(变成集合)中查找是否有带有键的常用词来完成。因此,输入将被处理成集合。然后,我将用于查找是否存在具有一组映射关键字的公共元素,并相应地触发结果函数(我已经为此编写了算法)。"show me directions"
#{"show" "me" "directions"}
clojure.set/intersection
当然,如果有更好的解决方案,我愿意接受任何建议。
答:
1赞
blekione
4/24/2016
#1
好的,看来我自己找到了解决方案。与其使用,不如使用 .(defn actions...)
(def actions...)
这是所需输出的结果。
评论