【发布时间】:2014-04-14 19:19:33
【问题描述】:
任务是编写一个反转序列的函数。我正在尝试尽可能有效地和 clojure-ish 做到这一点,但我想不出最好的方法。创建一个变量并开始将项目附加到该变量是不对的。如果有办法做到以下几点,对我来说似乎是惯用的:
来自 Clojure 文档
(map-indexed (fn [idx itm] [idx itm]) "foobar")
--> ([0 \f] [1 \o] [2 \o] [3 \b] [4 \a] [5 \r])
我所做的是这样的:
(defn testing [x]
(map-indexed (fn [idx itm] [(- (count x) idx) itm]) x))
产量:
(testing "foobar")
--> ([6 \f] [5 \o] [4 \o] [3 \b] [2 \a] [1 \r])
我想不通的是如何从本质上将其打包到具有正确索引的新列表中。老实说,目前在 Clojure 中,即使是声明变量的概念也让我无法理解。我所有的经验都是使用 Python 和 Ruby。
【问题讨论】:
-
你可以在clojuredocs.org/clojure_core/clojure.core/reverse#source找到
reverse的源代码。 -
我可以建议您将问题重新命名为“以 Clojure 惯用的方式实现反转序列”。通常,返回序列的惯用方式通常是惰性的,但对于这个问题,情况并非如此。
标签: clojure