-- tipul nr naturale
data Natural =
Zero |
Succ Natural
deriving Show
--fct pt predecesor
prede (Succ n) = n
-- egalitate
equal Zero Zero = True
equal (Succ n) Zero = False
equal Zero (Succ n) = False
equal m n =
if equal (prede m) (prede n)== True then True
else False
-- aduna 2 nr naturale
add n Zero = n
add m n =
Succ (add m (prede n))
-- diferenta a doua nr
subs n Zero = n
subs m n =
if (equal m n) then Zero
else prede (subs m ( prede n))
-- a mai mare ca b
gt (Succ n) Zero = True
gt Zero (Succ n) = False
gt m n =
if equal m n then False
else gt m n
-- a mai mic ca b
lt (Succ n) Zero = False
lt Zero (Succ n) = True
lt m n =
if equal m n then False
else lt m n
-- inmultire
mult n Zero = Zero
mult Zero n = Zero
mult (Succ n) (Succ Zero) = (Succ n)
mult (Succ Zero) (Succ n) = (Succ n)
mult m n =
add (mult (prede m) n) n
-- tipul List
data List a =
Empty |
Cons a (List a)
deriving Show
-- lungimea unei liste
lung Empty = 0
lung (Cons x lista) = 1 + lung lista
-- concatenare
conc Empty l = l
conc (Cons x lista) l =
Cons x (conc lista l)
-- tipul Tree, arbore binar de cautare
data Tree a =
Null |
Frunza a |
Nod (Tree a) a (Tree a)
deriving Show
-- inserare intr-un arbore binar
insert t Null = Frunza t
insert t (Frunza a) =
if (t < a) then Nod (Frunza t) a Null
else Nod Null a (Frunza t)
insert x (Nod left t right) =
if (x < t) then Nod (insert x left) t right
else Nod left t (insert x right)
-- construieste un arbore binar de cautare pornind de la o lista
constr Empty = Null
constr (Cons a lista) =
insert a (constr lista)
-- numara elem din arbore
numar Null = 0
numar (Frunza a) = 1
numar (Nod left x right) = 1 + numar left + numar right
-- adancimea arborelui
maxim a b =
if (a < b) then b
else a
adan Null = 0
adan (Frunza x) = 1
adan (Nod left x right) = 1 + maxim (adan left) (adan right)
-- o lista cu elem din arborele parcurs inordine - SRD (lista sortata)
srd (Frunza a) = Cons a Empty
srd Null = Empty
srd (Nod left a right) =
conc (srd left) (Cons a (srd right))
Niciun comentariu:
Trimiteți un comentariu