2015-08-15 56 views
2

manual of clojureseq我們閱讀:;; (seq x) is the recommended idiom for testing if a collection is not empty (every? seq ["1" [1] '(1) {:1 1} #{1}]) ;;=> true。但是空的集合本身也會返回nil,那麼seq用於測試集合的空虛的用法是什麼?在Clojure中使用Seq功能

+4

'(=()nil) - > false' – lispHK01

+0

一個空集合不*返回'nil'。你可能會想到無核心,這在另一個方向工作:如果你有'無',你正在尋找一個序列,它將作爲一個空的。 *但反之亦然*。在[other lisps](http://clojure.org/lisps)中,您的里程將會有所不同:*空集合與nil不同。 Clojure不等於零和'()。* – Thumbnail

回答

3

空集是不falsey,所以在測試它不會,如果它是空的或無關緊要的:如果你想做些別的事情,如果它是空的

(if '() "a" "b") 
=> "a" 

所以:

(if (seq '()) "a" "b") 
=> "b" 
3

從該頁面頂部的文檔:

序列也適用於字符串,本地Java數組(引用類型)和 實現Iterable的任何對象

所以使用了序列測試任何這些集合類型中的空白效果。所以你會得到一個一致的慣用方式來檢查任何這些類型的空白,如示例所示。

事實上seq在空集合上返回nil,並且nil也使檢查更簡單,而不需要檢查空或零。