Recursion Clojure递归函数
作为一名Clojure新手,我为这个小问题而烦恼: 我想遍历一个序列,执行一个Recursion Clojure递归函数,recursion,clojure,split,concatenation,Recursion,Clojure,Split,Concatenation,作为一名Clojure新手,我为这个小问题而烦恼: 我想遍历一个序列,执行一个split,然后在序列元素上执行一个str(连接)函数 以下是我的顺序: (("2.660.784") ("2.944.552") ("44.858.797")) 我想要得到的是这样的东西: ("2660784" "2944552" "44858797") 这是我为我的问题创建递归解决方案的尝试: (defn old [squence] (let [size (count squence)
split
,然后在序列元素上执行一个str
(连接)函数
以下是我的顺序:
(("2.660.784") ("2.944.552") ("44.858.797"))
我想要得到的是这样的东西:
("2660784" "2944552" "44858797")
这是我为我的问题创建递归解决方案的尝试:
(defn old
[squence]
(let [size (count squence)]
(loop [counter 1]
(if (<= counter size)
(apply str (clojure.string/split
(first (first squence))
#"\b\.\b"
))
(old (rest squence)))
)))
(defn old
[斯肯斯]
(让[size(count squence)]
(循环[计数器1]
(如果(最简单的编写方法是使用replace
,而不是split
/str
。一旦你编写了一个可以在单个字符串上进行这种转换的函数,你就可以使用map
或for
来对字符串序列进行转换。在这里,我不得不对其进行一些解构,因为无论出于什么原因,每个你们序列中的元素本身就是另一个序列;我刚刚取出了第一个元素
(for [[s] '(("2.660.784") ("2.944.552") ("44.858.797"))]
(clojure.string/replace s #"\b\.\b" ""))
试过这个吗
=> (flatten '(("2.660.784") ("2.944.552") ("44.858.797")))
("2.660.784" "2.944.552" "44.858.797")
有这么简单吗
(def data '(("2.660.784") ("2.944.552") ("44.858.797")))
(require '[clojure.string :as string])
(map #(string/replace (first %1) "." "") data)
;=> ("2660784" "2944552" "44858797")
请注意,在clojure中,如果适用的话,人们应该更喜欢向量而不是引用列表。您好,首先感谢您的回复。这些字符串之所以在单独的列表中(在一个列表中),是因为它们是我的clojure/enlive选择器步骤函数的产物,因此,我不能搞乱它。我正在这样做,所以我可以将它们解析为数字(确切地说是整数),基本上我想在生成的集合上应用Java Integer.parse(“字符串”)方法。我的思路正确吗,还是有更简单的方法来实现这一点?@SridharRatnakumar:Performance。向量是数组,列表是链表。除了添加或删除项目外,数组通常更快。基本上,在我必须将字符串转换为数字之后(使用Java的integer.parse方法进行解析)。是否有更优雅的解决方案?这个如何?(映射#(>(第一个%1)(字符串/替换“.”)(整数/解析整数))数据)
(def data '(("2.660.784") ("2.944.552") ("44.858.797")))
(require '[clojure.string :as string])
(map #(string/replace (first %1) "." "") data)
;=> ("2660784" "2944552" "44858797")