首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用clojure关键字处理符号

使用clojure关键字处理符号
EN

Stack Overflow用户
提问于 2013-07-06 08:59:05
回答 1查看 180关注 0票数 2

我对clojure相对来说是个新手,我想知道什么是解决以下问题的好方法。

我有两套符号,比如说:

v1:

代码语言:javascript
运行
复制
q w e r

v2:

代码语言:javascript
运行
复制
a s d f

他们用来建造第三套

答:

代码语言:javascript
运行
复制
qa qs qd qf
wa ws wd wf
ea es ed ef
ra rs rd rf

所有元素的A都是新符号,但我必须能够检索单个符号符号。我想在A上做各种操作,例如,构建A元素的所有组合的另一组,或者测试是否相等。

我想出了这两种解决方案:

解决方案1:

代码语言:javascript
运行
复制
(def A  {:qa [:q :a] :qs [:q :s] :qd [:q :d] :qf [:q :f]
         :wa [:w :a] :ws [:w :s] :wd [:w :d] :wf [:w :f]
         :ea [:e :a] :es [:e :s] :ed [:e :d] :ef [:e :f]
         :ra [:r :a] :rs [:r :s] :rd [:r :d] :rf [:r :f]})

(defn get-v1 [key] (first (key A)))

(defn get-v2 [key] (last (key A)))

=>(get-v1 :qa)
:q

Solution2:

代码语言:javascript
运行
复制
(def A [:qa :qs :qd :qf
        :wa :ws :wd :wf
        :ea :es :ed :ef
        :ra :rs :rd :rf])

(defn get-v1 [key] (keyword (str (first (name key)))))

(defn get-v2 [key] (keyword (str (last (name key)))))

=>(get-v2 :ws)
:s

事实上,解决方案1是不完整的,因为A元素的顺序也很重要。因此,需要在解决方案2中定义A。但我还没有想出一种聪明的方法来创建解决方案1中的排序映射。

问题:

1.是正确的方法吗?

2.如果是这样的话,我的解决方案之一是一种很好的方法,还是有一种更方便的方法?我倾向于解决方案2。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-06 12:19:52

从键中派生值是更通用的解决方案。这意味着您可以给它任何键,它将返回它的“适当”值。也就是说,您可以将:xy交给第二个算法,即使它不包含在A中,它也会尝试使用它。如果这是个问题,那么你的第一个解决方案似乎更好。

至于为第二个解决方案创建排序映射,我可能会定义A并从中生成排序映射。这减少了手工复制,同时允许您以更自然的方式提供数据集。(另外,它很容易测试!)

代码语言:javascript
运行
复制
(def A [:qa :qs :qd :qf
        :wa :ws :wd :wf
        :ea :es :ed :ef
        :ra :rs :rd :rf])

(defn assoc-v
  [m k]
  (let [[a b] (seq (name e))]
    (assoc m k [(keyword a) (keyword b)])))

(defn make-a
  [elements]
  (reduce assoc-v (sorted-map) elements))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17501365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档