我是Clojure的新手,我正试图通过移植我的一个代码来学习它,但是我目前陷入了以下问题:
=> lineup
{:c b4|b4|b3|b3, :sg b6|b11|b6|b6, :sf b7|b5|b5|b5, :pf b3|b1|b1|b1, :pg b10|b10|b11|b10}
=> (validate-lineup lineup)
ArityException Wrong number of args (0) passed to: PersistentHashMap clojure.lang.AFn.throwArity (AFn.java:437)
Run Code Online (Sandbox Code Playgroud)
这是功能:
(defn validate-lineup [lineup]
(map (fn [position]
((hash-map (position 0)
(map
(fn [s] (.substring s 1))
(str/split (position 1) #"\|"))
))
) lineup))
Run Code Online (Sandbox Code Playgroud)
我正在尝试产生类似以下结果的东西:
{:c {"4" "4" "3" "3"} :sg {"6" "11" "6" "6"} :sf {"7" "5" "5" "5"} ... }
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助,如果我不是以正确的"Lisp"方式写作,请教我如何.
Nik*_*zov 12
你的主要问题在这里:
(fn [position]
((hash-map (position 0)
(map
(fn [s] (.substring s 1))
(str/split (position 1) #"\|")))))
Run Code Online (Sandbox Code Playgroud)
您创建哈希映射,然后将其称为函数(请注意之前的双括号hash-map
).你可以删除它并得到这个:
(fn [position]
(hash-map (position 0)
(map
(fn [s] (.substring s 1))
(str/split (position 1) #"\|"))))
Run Code Online (Sandbox Code Playgroud)
这种方式validate-lineup
会回来
({:c ("4" "4" "3" "3")}
{:sg ("6" "11" "6" "6")}
{:sf ("7" "5" "5" "5")}
{:pf ("3" "1" "1"` "1")}
{:pg ("10" "10" "11" "10")})
Run Code Online (Sandbox Code Playgroud)
但是你需要单个地图,而不是一系列地图.你可以合并它们:
(apply merge (validate-lineup lineup))
Run Code Online (Sandbox Code Playgroud)
一些建议:
使用subs
而不是.substring
:迭代map时(fn [s] (subs s 1))
使用destructuring
(fn [[key value]]
(hash-map key
(map
(fn [s] (subs s 1))
(str/split value #"\|"))))
Run Code Online (Sandbox Code Playgroud)
有一种利用into函数从对向量创建映射的简洁方法.因此,您可以转换lineup
为对的向量,其中第一项对是键,第二项是数字列表:
(defn validate-lineup [lineup]
(into {} (map (fn [[key value]]
[key
(map #(subs s 1) (str/split value #"\|"))])
lineup)))
Run Code Online (Sandbox Code Playgroud)
您可以b4|b4|b3|b3
通过re-seq解析数字序列:
user=> (re-seq #"\d+" "b1|b2|b3")
("1" "2" "3")
Run Code Online (Sandbox Code Playgroud)
最后你可以map
用for替换外部:
(defn validate-lineup [lineup]
(into {} (for [[key value] lineup]
[key (re-seq #"\d+" value)])))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5269 次 |
最近记录: |