我正在和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