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

  • amc

    amc

    21 EYLÜL 2005
  • Curso Online Gratuito

    Curso Online

    4 Aralık 2011
  • Theodore Leaf

    Theodore Lea

    29 AĞUSTOS 2006