2009-11-08 38 views
6

Clojure khác biệt? phương pháp không mất một bộ sưu tập, mà đúng hơn là một danh sách các argsLàm cách nào để sử dụng Clojure? chức năng trên một bộ sưu tập?

(distinct? x) 
(distinct? x y) 
(distinct? x y & more) 

Vì vậy (biệt? 0 0 0 0) đúng trả về sai, trong khi (biệt? [0 0 0 0]) trả về giá trị đúng. Tôi có thể sử dụng khác nhau như thế nào? trên một bộ sưu tập sao cho vượt qua nó một bộ sưu tập [0 0 0 0] sẽ trả về false vì bộ sưu tập chứa các bản sao?

Tôi nhận ra rằng chức năng đang hoạt động chính xác, nhưng tôi đang tìm kiếm một mẹo để áp dụng nó vào nội dung của bộ sưu tập thay vì danh sách các arg.

Là một workaround, Tôi hiện đang có

(defn coll-distinct? [coll] 
    (= (distinct coll) coll)) 

nhưng tôi cảm thấy như tôi là thiếu một cách thanh lịch hơn tái sử dụng biệt?

+0

lol, mẹo để 'áp dụng' nó vào nội dung – gtrak

Trả lời

16

Nếu bạn muốn chuyển đối số dưới dạng hàm seq thành hàm, hãy sử dụng apply.

(apply distinct? [1 2 3 1]) 
; false 
(apply distinct? [1 2 3]) 
; true 
+0

cách thức hoạt động trong trường hợp bộ sưu tập trống? –

+0

@KenLiu không có hình thức 0 khác biệt, vì vậy '(áp dụng riêng biệt? [])' Ném một "Số lượng sai của args (0)" ArityException, giống như '(khác biệt?)'. So sánh điều này với '+', có dạng 0-arity: '(+)' và '(áp dụng + [])' cả hai đều trả về '0'. – chbrown

Các vấn đề liên quan