User Tools

Site Tools


codesnippets:bindingandpatternmatching

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
codesnippets:bindingandpatternmatching [2021/04/14 10:43] – [Tuples] f2b216codesnippets:bindingandpatternmatching [2025/10/08 00:48] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== Binding ====== +====== Binding and pattern matching ======
-~~DISCUSSION~~+
  
 A binding binds a name or even several names with a function definition. A binding binds a name or even several names with a function definition.
Line 119: Line 118:
 </code> </code>
  
-==== Example 2 ====+==== Algebraic data types ====
  
-<code Haskell> +  * type definitions 
-Person name number Person "Lutz" 1243+    * algebraic data types can be defined in the form ''data'' <TypeName> ''='' <DataConstructorA> <DataTypeA1> <DataTypeA2> ... <DataTypeAN> ''|'' <DataConstructorB> <DataTypeB1> <DataTypeB2> ... <DataTypeBM> ''|'' <DataConstructorO> ...  
 +    * whereas ''|'' devides variants simmilar to variants in unions in programming the language C and C++ 
 +    * each variant has to have a constructor 
 +    * each constructor can contain zero, one or more data types 
 +  * construction of data of algebraic data types  
 +    * constructed in the form <DataConstructor> <Value1> <Value2> ... <ValueN> 
 +    * whereas the values have to conform with the data type declaration 
 +  * pattern maching with tuples 
 +    * in the same form as thay are constructed above 
 +    * but with binding names 
 +  * example 
 +    * code lines:<code Haskell> 
 +data MyData = MyVariantA Integer Char Double | MyVariantB Int | MyVariantC 
 +MyVariantA first b zet MyVariantA 12 'a' 23.4
 </code> </code>
- +    * work in:<code Haskell>
-...works in... +
- +
-<code Haskell> +
-module Main where +
 main :: IO () main :: IO ()
 main =  main = 
-        do +    do 
-                print name +        print first 
-                print number+        print 
 +        print zet
  
-data Person Person { sName :: String, iNumber :: Integer }+data MyData MyVariantA Integer Char Double | MyVariantB Int | MyVariantC
  
-Person name number Person "Lutz" 1243+MyVariantA first b zet MyVariantA 12 'a' 23.4 
 + 
 +MyVariantB n = MyVariantB 123 
 + 
 +MyVariantC = MyVariantC -- is not binding anything, but compiles consistently
 </code> </code>
 +    * with compiler warning, which we ignore for pedagogical reasons
 +    * executes, with output:<code>
 +12
 +'a'
 +23.4
 +123
 +</code>
 +  * NOTE: I may look like: It does'nt make sense to have a constructor no elements. However, ''MyVariantC'' is already a value in itself, and can be used to differentiate between the variants.
  
  
 +===== ✎ =====
 +~~DISCUSSION~~
codesnippets/bindingandpatternmatching.1618389837.txt.gz · Last modified: (external edit)

Except where otherwise noted, content on this wiki is licensed under the following license: CC0 1.0 Universal
CC0 1.0 Universal Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki