add illustration samples
This commit is contained in:
@@ -0,0 +1,8 @@
|
|||||||
|
data Color = R | B
|
||||||
|
data RedBlackSet a = E | T Color (RedBlackSet a) a (RedBlackSet a)
|
||||||
|
|
||||||
|
balance B (T R (T R a x b) y c) z d = T R (T B a x b) y (T B c z d)
|
||||||
|
balance B (T R a x (T R b y c)) z d = T R (T B a x b) y (T B c z d)
|
||||||
|
balance B a x (T R (T R b y c) z d) = T R (T B a x b) y (T B c z d)
|
||||||
|
balance B a x (T R b y (T R c z d)) = T R (T B a x b) y (T B c z d)
|
||||||
|
balance color a x b = T color a x b
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
% Message passing in Erlang - the "add" and "mult"
|
||||||
|
% identifiers are "atoms", constant values that are
|
||||||
|
% used to match incoming messages (which are technically
|
||||||
|
% tuples).
|
||||||
|
|
||||||
|
loop() ->
|
||||||
|
receive
|
||||||
|
{add, A, B} ->
|
||||||
|
io:format("adding: ~p~n", [A + B]),
|
||||||
|
loop();
|
||||||
|
{mult, A, B} ->
|
||||||
|
io:format("multiplying: ~p~n", [A * B]),
|
||||||
|
loop()
|
||||||
|
end.
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
-- In Haskell, patterns are used to define function overloads.
|
||||||
|
-- This is a very "static" case.
|
||||||
|
|
||||||
|
data Food = Pasta | Pizza | Chips
|
||||||
|
|
||||||
|
isEqualFood :: Food -> Food -> Bool
|
||||||
|
isEqualFood Pasta Pasta = True
|
||||||
|
isEqualFood Pizza Pizza = True
|
||||||
|
isEqualFood Chips Chips = True
|
||||||
|
isEqualFood _ _ = False
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
-- This function uses a boolean guard and defines
|
||||||
|
-- its value only for the remaining cases.
|
||||||
|
fact :: Int -> Int
|
||||||
|
fact x | x <= 1 = 1
|
||||||
|
| otherwise = x * (fact (x - 1))
|
||||||
|
|
||||||
|
-- Alternatively, pattern matching can be used for an
|
||||||
|
-- even more explicit declaration.
|
||||||
|
fact' :: Int -> Int
|
||||||
|
fact' 0 = 1
|
||||||
|
fact' 1 = 1
|
||||||
|
fact' x = x * (fact (x - 1))
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
// In F# the keywoard `match` can be used to run an
|
||||||
|
// explicit pattern match.
|
||||||
|
|
||||||
|
let rec listLength l =
|
||||||
|
match l with
|
||||||
|
| [] -> 0
|
||||||
|
| _ :: xs -> 1 + (listLength xs)
|
||||||
|
|
||||||
|
// Alternatively, this special syntax is available
|
||||||
|
// that removes the explicit parameter and the
|
||||||
|
// `match` call.
|
||||||
|
let rec listLength' = function
|
||||||
|
| [] -> 0
|
||||||
|
| _ :: xs -> 1 + (listLength' xs)
|
||||||
Reference in New Issue
Block a user