2012-01-26 9 views
4
------------------------- 
clojure.core/seq 
([coll]) 
    Returns a seq on the collection. If the collection is 
    empty, returns nil. (seq nil) returns nil. seq also works on 
    Strings, native Java arrays (of reference types) and any objects 
    that implement Iterable. 
------------------------- 
clojure.core/seq? 
([x]) 
    Return true if x implements ISeq 
----- 

明らかに空ですか? seqに基づいています。空の違いは何ですか?とnil?私は混乱しているsooooだ。seqとseqの違いは何ですか?

clojure.core/empty? 
([coll]) 
    Returns true if coll has no items - same as (not (seq coll)). 
    Please use the idiom (seq x) rather than (not (empty? x)) 

そして、もっと:

(not (seq?())) ;;false 
(not (seq())) ;;true 
(not nil) ;;true 

答えて

10
  • seqがシーケンスにコレクションを変換し、リターンは、コレクションが空の場合はnil。引数がnilの場合はnilも返します。
  • seq?は、引数がシーケンス(ISeqインターフェイスを実装する)の場合はtrueを返します。
  • empty?は、引数がnilまたは空のコレクションの場合はtrueを返します。
  • nil?は、引数がnilの場合はtrueを返します。

私はempty?のdocstringで(seq x)イディオムについて少しはそうのようなif-letを使用しての一般的な方法に適用されると思います:

(defn print-odd-numbers [coll] 
    (if-let [x (seq (filter odd? coll))] 
    (println "Odd numbers:" x) 
    (println "No odd numbers found."))) 
関連する問題