Redukční strategie

Redukční krok

Striktní

Normální

Líná (Líné vyhodnocení)

Haskell

definice funkce

cube x = x *x * x

Striktní redukční strategie

cube (3+5) --> cube 8 --> 8 * 8 * 8 --> 64 * 8 --> 512

Normální redukční strategie

cube (3+5) --> (3+5) * (3+5) * (3+5) 
--> 8 * (3+5) * (3+5) --> 8 * 8 * (3+5) 
--> 64 * (3+5) --> 64 * 8 --> 512

Líná redukční strategie

cube (3+5) --> (3+5) * (3+5) * (3+5)
--> 8 * 8 * 8

Obecné vlastnosti redukčních strategií

Churchova-Rosserova věta

O perpetualitě

O normalizaci

Práce s nekonečnými seznamy

repeat :: a -> [a]
repeat x = x : repeat x

take 8 (repeat 1) --> [1,1,1,1,1,1,1,1]
head (repeat 1) --> head (1 : repeat 1) --> 1

Zápis a generování seznamů

enumFromTo 1 12 --> [1,2,3,4,5,6,7,8,9,10,11,12]
enumFromTo 'A' 'Z' -->asd
enumFrom m		Enum => a -> [a]		[m..]
enumFromTo m n		Enum => a -> a -> [a]		[m..n]
enumFromThen m m' 	Enum => a -> a -> [a]		[m, m'..]
enumFromThen m m' n 	Enum => a -> a -> a -> [a]	[m, m'..n]

Intenzionální definice seznamu

generátor

nová_proměnná <- seznam nebo vzor <- seznam

Kvalifikátory

Predikát

Lokální definice