我正在和clojure一起工作,虽然我之前曾经和lisp一起讨论过,但我很难找到一种干净的方法在cond语句中嵌套let语句。例如,考虑下面的函数:let cond
(defn operate-on-list [xs]
(let [[unpack vector] (first xs)]
(cond
[(empty? xs) 'empty
unpack vector
:else (operate-on-list (rest xs))])))
这是名单上的一个非常标准的递归操作,但它需要做的列表中的第一个元素上的一些工作与它的内容的作品前。这个问题当然是列表可能是空的。
在这个例子中,它不会是很难改变unpack
到((first xs) 0)
和vector
到((first xs) 1)
,但如果更多的工作需要在(第一XS)做到了这一点很快变得难看。
有没有什么办法有效地使用let语句部分通过cond?
谢谢。
-Nate
嗨发现 - 这是我不清楚你想在这里实现什么。您可能会发现这个有趣的http://www.assembla.com/spaces/clojure/tickets/200和http://groups.google.com/group/clojure/browse_thread/thread/c1097ce07506fc39请考虑说明该功能应该是什么做你的问题,以及一些示例输入和输出。该语法看起来不像一个有效的cond语句,因为cond的主体被包装在一个向量中。 – 2010-01-15 00:16:47