Scalaz एक विधि इस तरह के Boolean
, Option[_]
, Validation[_, _]
, Either[_, _]
आदि के रूप में विभिन्न ADTS के लिए fold
नामित इस विधि मूल रूप से है जो दिए गए एडीटी के लिए सभी संभव मामलों के लिए इसी कार्यों लेता है प्रदान करता है। दूसरे शब्दों में, एक पैटर्न मैच नीचे दिखाया गया है:विकल्प, या तो आदि पर गुना का संबंध क्या है और ट्रैवर्सबल पर गुना है?
x.fold(f, g, ..., z)
कुछ उदाहरण::
x match {
case Case1(a, b, c) => f(a, b, c)
case Case2(a, b) => g(a, b)
.
.
case CaseN => z
}
के बराबर है
scala> (9 == 8).fold("foo", "bar")
res0: java.lang.String = bar
scala> 5.some.fold(2 *, 2)
res1: Int = 10
scala> 5.left[String].fold(2 +, "[" +)
res2: Any = 7
scala> 5.fail[String].fold(2 +, "[" +)
res6: Any = 7
एक ही समय में, एक ही साथ एक ऑपरेशन है Traversable[_]
प्रकारों के लिए नाम, जो अपने तत्वों पर कुछ संचालन करने वाले संग्रह पर ट्रैवर करता है, और परिणाम मान जमा करता है। fold
/catamorphism - उदाहरण के लिए,
scala> List(2, 90, 11).foldLeft("Contents: ")(_ + _.toString + " ")
res9: java.lang.String = "Contents: 2 90 11 "
scala> List(2, 90, 11).fold(0)(_ + _)
res10: Int = 103
scala> List(2, 90, 11).fold(1)(_ * _)
res11: Int = 1980
क्यों इन दोनों के संचालन में एक ही नाम के साथ की पहचान कर रहे हैं? मैं दोनों के बीच किसी भी समानता/संबंध देखने में विफल रहता हूं। मैं क्या खो रहा हूँ?
ओह, तो इसे दोबारा लागू किया जाना है! समझ में आता है, धन्यवाद। – missingfaktor
["कैटोमोर्फिज्म" पर विकिपीडिया पृष्ठ] (http://en.wikipedia.org/wiki/Catamorphism) कहता है, "कार्यात्मक प्रोग्रामिंग में, एक कैटमोर्फिज्म क्रियात्मक प्रोग्रामिंग से मनमाने ढंग से बीजगणित डेटा से ज्ञात सूचियों पर फ़ोल्डरों का एक सामान्यीकरण है प्रकार जिन्हें प्रारंभिक बीजगणित के रूप में वर्णित किया जा सकता है। " इसके बाद यह एरिक मीजर के पेपर "केले, लेंस, लिफाफे और बारबेड वायर के साथ कार्यात्मक प्रोग्रामिंग" को इंगित करता है। मुझे लगता है कि इस विषय को बेहतर समझने के लिए मुझे उस पेपर को पढ़ना चाहिए। विकिपीडिया पेज के अंत में – missingfaktor
@missingfaktor, कैटमोर्फिज्म पर 6 भाग ब्लॉग है जो बहुत ही सुलभ लगता है। मैं अभी इसे पढ़ रहा हूँ। यह एफ # है लेकिन मुझे यकीन है कि आपके लिए कोई समस्या नहीं होगी। – huynhjl