SORU
6 NİSAN 2010, Salı


Clojure Core veya Contrib Zip fonksiyon için bir eşdeğer var mı?

Clojure, çiftleri bir listesini vermek için iki listeyi birleştirmek istiyorum

> (zip '(1 2 3) '(4 5 6))  
((1 4) (2 5) (3 6))

Haskell veya ruby'de fonksiyon denirzip. Bunu hayata geçirmek zor değil, ama Çekirdek veya Contrib bir işlev eksik değildi emin olmak istedim.

Çekirdek zip bir ad var, ama sonra ne olduğumu olmak üzere görünmez Fermuar fonksiyonel tekniğine erişim described.

Core 2 veya daha fazla listeleri, bu şekilde bir araya getirilmesi için eşdeğer bir işlevi var mı?

Eğer değilse, bu işlevi gereksiz hale getiren deyimsel bir yaklaşım vardır?

CEVAP
6 NİSAN 2010, Salı


(map vector '(1 2 3) '(4 5 6))

sen ne istiyor:

=> ([1 4] [2 5] [3 6])

Haskell hepsi belirli olması gerekir çünküzipWith (zipWith3, zipWith4, ...) fonksiyonları bir koleksiyon gerekiryazın; özellikle, onlar kabul giriş listeleri sayısını sabit olması gerekir. (, 12**, ... *, zip*11 aile tupling ortak kullanma durumu zipWith ailenin bir uzmanlık alanı olarak kabul edilebilir.

Buna karşılık, Clojure ve diğer Lisps değişken parametre fonksiyonlar da onlardan biri ve "" bir şekilde Haskell'ın benzer . tupling için kullanılabilir için iyi bir destek var

zipWith (\x y -> (x, y))

İnşa etmek deyimsel şekilde bir "başlık" olarak Clojure yukarıda gösterilen kısa bir vektör oluşturmaktır.

(Sadece bütünlüğü, not Haskell ile bazı temel uzantıları mı izin değişken parametre fonksiyonlar; kullanarak onları gerektirir iyi bir anlayış, Dil ve vanilya Haskell 98 muhtemelen desteklemez onları, böylece sabit parametre fonksiyonlar tercih için standart kütüphane.)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Helder Barreto

    Helder Barre

    22 Mayıs 2006
  • pjtoohot

    pjtoohot

    15 NİSAN 2008
  • Santozz Yazz

    Santozz Yazz

    23 Mart 2014