Programowanie w systemie UNIX/Haskell: Różnice pomiędzy wersjami

brak opisu edycji
m (→‎Zobacz również: https://wiki.haskell.org/How_to_read_Haskell)
Nie podano opisu zmian
 
 
<sourcesyntaxhighlight lang=haskell}
-- https://pl.wikibooks.org/w/index.php?title=Programowanie_w_systemie_UNIX/Haskell&action=edit&section=5
> :set +m
> a 1
3
</syntaxhighlight>
</source>
 
 
|valign="top" style="border-right:1px dashed SlateBlue"|
 
<sourcesyntaxhighlight lang=haskell>
-- Haskell
square :: Int -> Int
square n = n*n
</syntaxhighlight>
</source>
|valign="top" style="border-right:1px dashed SlateBlue"|
<sourcesyntaxhighlight lang=c>
// c
int square(int n) {
return n*n; }
 
</syntaxhighlight>
</source>
 
 
* stylu pointfree
 
<sourcesyntaxhighlight lang=haskell>
-- the '.' operator is used to compose functions
-- the result is a descending sort
countdown = desort [2,8,7,10,1,9,5,3,4,6]
</syntaxhighlight>
</source>
 
Porównanie:
|valign="top" style="border-right:1px dashed SlateBlue"|
 
<sourcesyntaxhighlight lang=haskell>
-- Haskell
f . g -- pointfree style
f (g x) --
( f . g ) (x) --
</syntaxhighlight>
</source>
 
|valign="top" style="border-right:1px dashed SlateBlue"|
<sourcesyntaxhighlight lang=c>
// c
f(g(x))
</syntaxhighlight>
</source>
 
|}
Funkcja go<ref>[https://stackoverflow.com/questions/5844653/haskell-why-the-convention-to-name-a-helper-function-go stackoverflow question: haskell-why-the-convention-to-name-a-helper-function-go]</ref>
 
<sourcesyntaxhighlight lang=haskell>
-- https://stackoverflow.com/questions/5926033/haskell-efficient-equivalent-of-for-loop
import System.IO
 
main = loop 1000000
</syntaxhighlight>
</source>
 
 
 
<sourcesyntaxhighlight lang=haskell>
-- https://gist.github.com/niorad/45187d9eb76c585e573e
divideBy x y = go x y 0
| a < b = (count, a)
| otherwise = go (a - b) b (count + 1)
</syntaxhighlight>
</source>
 
Zmienna count jest pomocniczym licznikiem
===cycle===
Cycle
<sourcesyntaxhighlight lang=haskell>
ghci> take 10 (cycle [1,2,3]) -- weź 10 pierwszych elementów z listy cyklicznej utworzonej przez powtarzanie elementów listy [1,2,3]
[1,2,3,1,2,3,1,2,3,1]
ghci> take 12 (cycle "LOL ")
"LOL LOL LOL "
</syntaxhighlight>
</source>
 
==Klasy==
Bardziej skomplikowany przykład, trójkąt Sierpińskiego:
 
<sourcesyntaxhighlight lang=haskell>
-- http://dev.stephendiehl.com/hask/#diagrams
import Diagrams.Prelude
main :: IO ()
main = defaultMain example
</syntaxhighlight>
</source>
 
Uruchamiamy:
przykład:
 
<sourcesyntaxhighlight lang=haskell>
:info ($)
($) :: (a -> b) -> a -> b -- Defined in ‘GHC.Base’
infixr 0 $
 
</syntaxhighlight>
</source>