Recursion 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)

作为一名Clojure新手,我为这个小问题而烦恼:

我想遍历一个序列,执行一个
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")