我对 clojure 比较陌生,我想知道什么是解决以下问题的好方法。
我有两组符号,比如:
v1:
q w e r
v2:
a s d f
他们被用来建造第三套
A:
qa qs qd qf
wa ws wd wf
ea es ed ef
ra rs rd rf
A 的所有元素都是新符号,但我必须能够检索单符号符号。我想对 A 进行各种操作,例如,构建另一组 A 元素的所有组合或测试是否相等。
我想出了这两个解决方案:
解决方案1:
(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
解决方案2:
(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。