将操作结果与哈希图值相关联

Associate result of operation to the hashmap value

提问人:blekione 提问时间:4/24/2016 最后编辑:blekione 更新时间:4/24/2016 访问量:48

问:

我有 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

当然,如果有更好的解决方案,我愿意接受任何建议。

Clojure(克洛朱尔酒店) 哈希映射

评论

0赞 jmargolisvt 4/24/2016
您的地图是向后的。将符号用作键,而不是值。根据您要做的事情,地图甚至可能不是正确的选择。

答:

1赞 blekione 4/24/2016 #1

好的,看来我自己找到了解决方案。与其使用,不如使用 .(defn actions...)(def actions...)

这是所需输出的结果。