簡體   English   中英

Clojure將序列與向量進行比較

[英]Clojure compare sequence to vector

http://www.4clojure.com/problem/23 :“編寫一個反轉序列的函數”

一種解決方案是(fn [x] (reduce conj () x)) ,它通過了所有測試。 但是,我很好奇為什么該解決方案適用於第一個測試:

(= (__ [1 2 3 4 5]) [5 4 3 2 1])

內聯函數在REPL中的計算結果為true

(= ((fn [x] (reduce conj () x)) [1 2 3 4 5]) [5 4 3 2 1])
true

但是,如果我評估=的第一個參數,我得到(5 4 3 2 1) ,並且(= (5 4 3 2 1) [5 4 3 2 1])拋出一個ClassCastException

為什么前者有效而后者無效呢? 看起來它們應該是等價的......

問題是您的列表文字(5 4 3 2 1)正在被評估為函數調用。 要正確使用它,您需要引用它,如下所示:

(= '(5 4 3 2 1) [5 4 3 2 1]) ;; => true

另一種沒有減少的方法就是使用into ()因為它可以作為你的減少而非常繁瑣地工作。 所以當你用這種方式填空時,它解決了任務:

(= (into () [1 2 3 4 5]) [5 4 3 2 1]) ;; true
(= (into () (sorted-set 5 7 2 7)) '(7 5 2)) ;; true
(= (into () [[1 2][3 4][5 6]]) [[5 6][3 4][1 2]]) ;; true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM