Pertanyaan Apa perbedaan antara seq dan seq?


-------------------------
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
-----

Sudah jelas kosong? didasarkan pada seq. apa perbedaan antara kosong? dan nihil? Aku sangat bingung.

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))

Dan banyak lagi:

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

4
2018-01-26 20:49


asal


Jawaban:


  • seq mengonversi koleksi ke urutan dan mengembalikan nol jika koleksi kosong; juga mengembalikan nil jika argumennya nol.
  • seq? mengembalikan nilai true jika argumen merupakan urutan (mengimplementasikan antarmuka ISeq).
  • empty? akan mengembalikan nilai true jika argumennya adalah nol atau koleksi kosong.
  • nil? akan menghasilkan true jika argumennya nol.

Saya kira sedikit tentang itu (seq x) idiom di docstring untuk empty? berlaku untuk praktik umum penggunaan if-let seperti ini:

(defn print-odd-numbers [coll]
  (if-let [x (seq (filter odd? coll))]
    (println "Odd numbers:" x)
    (println "No odd numbers found.")))

10
2018-01-26 21:06