2014-09-28 14 views
6

Clojure'da identity işlevine sahibiz. Bu is used as follows: Ben Haskell Görebildiğimiz kadarıylaClojure'deki kimlik işlevi Haskell'de kimlik işleviyle aynı kullanım ve amaca sahip mi?

user=> (filter identity [1 2 3 nil 4 false true 1234]) 
(1 2 3 4 true 1234) 

user=> (partition-by identity (sort "abcdaabccc")) 
((\a \a \a) (\b \b) (\c \c \c \c) (\d)) 

- idis used when using lenses ve used in other higher order functions olduğunu.

Sorum Clojure içinde identity fonksiyon Haskell id işleviyle aynı kullanımını ve amacı var mı (ayrı bariz Tipi sistem farklılıklarından) nedir? Bir şey eksik gibi

(defprotocol Functor 
    (fmap [functor f] "fmap :: f a -> (a -> b) -> f b")) 

;; data Id a = Id { runId :: a } 
(defrecord Id [runId] 
    Functor 
    (fmap [functor f] 
     (Id. (f (:runId functor))))) 

Yani hissetmek: Biz Idfunctor açısından tanımlanır bakınız -

Ben Lens in Clojure ait the following example baktığınızda olduğunu sormak neden.

+2

clojure içinde 'Id' tanımı Haskell'deki 'Kimlik' funkerine eşittir. – bennofs

cevap

6

Haskell'de id işlevi I combinator of lambda calculus'dur.

-- | Identity function. 
id :: a -> a 
id x = x 

O useful 0 veya boş liste faydalı olduğunu yoludur: Bu trival fonksiyonudur. Clojure işlevindeki identity işlevi, değiştirilmemiş bağımsız değişkenini döndürmesiyle eşdeğerdir. benzeri

(defn identity 
    "Returns its argument." 
    {:added "1.0" 
    :static true} 
    [x] x) 

Diğer örneğin Identity monads kavramları doğrudan id işlevine bağlı değildir.