Functies op Proposities evalueer:: Bedeling  Prop  Bool tautologie:: Prop  Bool contradictie:: Prop  Bool equivalentie:: Prop  Prop  Bool vervulbaar::

Slides:



Advertisements
Verwante presentaties
Lijsten in de -calculus Een lijst [E 1, E 2,..., E n ] kan in de -calculus voorgesteld worden als z.((z E 1 ) z.((z E 2 )... z.((z E n ) nil)...) met nil.
Advertisements

Deel I: Functionele Programmeertalen Hoofdstuk 4: Functioneel Programmeren.
Uitwerking tentamen Functioneel Programmeren 29 januari 2009.
Hogere-ordefuncties nEen lijst langs lopen en met elk element iets doen nEen lijst langs lopen en sommige elementen selecteren map filter.
Reductiemachine Functionele talen en dus de -calculus, worden vaak geïmplementeerd door een reductiemachine. De elementaire stap is een reductie, en de.
Computervaardigheden Hoofdstuk 4 — Scripting (Let op: dit is enkel voor studenten Biologie.)
 - congruentie -regel:
1 SOCS Hoofdstuk 1 Programmeertaal C. 2 Kenmerken van C Hogere programmeertaal  Grote verzameling types, strenge type controle  Zelf nieuwe types definiëren.
Polymorf zoeken zoek :: (a  a  Bool)  [ (a, b) ]  a  b zoek eq [ ] x = ??? zoek eq ((a,b):ts) x | eq a x = b | otherwise = zoek eq ts x MayBe b No.
Hogere-orde functies: herhaald patroon? Parametrizeer! product :: [Int]  Int product [ ]= product (x:xs)= 1 product xs x * and :: [Bool]  Bool and [
Hoger-ordefuncties op lijsten nDoorloop een lijst en... map :: (a  b)  [a]  [b] filter :: (a  Bool)  [a]  [a] foldr :: (a  a  a)  a  [a]  a.
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
Inleidend probleem Data structuur (hiërarchie van classes)
Functies als Getallen Jan Martin Jansen.
-calculus.
Functies definiëren nDoor combinatie van standaardfuncties fac :: Int  Int fac n = product [1..n] oneven :: Int  Bool oneven n = not (even n) negatief.
Char en String nCharéén letter uord ::Char  Int uchr ::Int  Char nString[Char] uwords :: String  [String] uunwords :: [String]  String ”hoi” ”CKI”
Hogere-ordefuncties nVoeg de elementen van een lijst samen nCombineer twee functies foldr :: (a  b  b)  b  [a]  b [a] (.) :: (b  c)  (a  b)  a.
Reguliere talen nReguliere grammatica: versimpelde Contextvrije grammatica nFinite-state Automaton: andere manier om een taal te beschrijven nReguliere.
Opg.1a: substring } String substring(int a) { int t; for (t=a; t
Een echte re stack-machine nMemory nRegisters R0 R1 R2 R3 R4 PC SP MP nMemory uProgram uStack uMemory nRegisters uProgr.counter uStack pointer uMark pointer.
Imperatief programmeren nProgramma bestaat uit nRunnen is opdrachten gegroepeerd in methoden één voor één uitvoeren te beginnen met main.
Zelfgemaakt datatype voor bomen nMet functies data Tree a = Bin (Tree a) (Tree a) | Leaf a foldTree :: Tree a  b foldTree (b,lf) (Bin le ri) = b (foldTree.
Hoofdstuk Strings en arrays. Primitieve types nint gehele getallen-17, -5, 0, 3, 178 ndouble reëele getallen3.141, 2.0, -1.5E8 nbool waarheidswaarden.
Ontleden nNon-deterministisch m.b.v. Parser-combinators nDeterministisch m.b.v. Stack-machine type Parser a b = [a]  [ (b, [a]) ] type Parser a b = [a]
Functioneel Programmeren Daan Leijen. Wat gaan we doen? 3 fundamentele principes van computatie Equationeel redeneren IO-monad GUI's in Haskell (wxHaskell)
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
Opleiding INFORMATICA Programmeertaal Implementatie Taal ontwerp Vertalen.
Opgave 1a: void nvoid staat in de header van een methode die geen resultaatwaarde heeft nde aanroep van een void-methode is dan een opdracht i.p.v. een.
Eenvoudig voorbeeld: Steden in Belgie
Vakdidactiek 9/12/2002 Leen Depré
Taal nEen Alfabet is… een eindige verzameling symbolen nEen Taal is… een deelverzameling van T* bij een bepaald alfabet T nEen Zin is… een element van.
Samenvatting hst. 3 sec. 1-3 ( ) :: Parser a b  Parser a b  Parser a b ( ) :: Parser a (b  c)  Parser a b  Parser a c ( ) :: (b  c)  Parser a b.
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
Tircms03-p les 2 Hfdst 3,4 Meer operatoren Functies.
Tentamen vraag 1 Als L en M talen zijn, dan nL  M is gelijk aan { s  t | s  L, t  M } nL M is gelijk aan { s t | s  L, t  M } nL n is gelijk aan.
Parsing 1. Situering Contextvrije grammatica’s Predictive (of recursive-descent) parsing LR-parsing Parser generator: Yacc Error recovery 2.
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
Intermezzo: Queries op zoekbomen Datastructuren. Queries: hoe op te lossen We hebben: – Een zoekboom (gewoon, rood-zwart, AVL,…) – Een vraag / querie.
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
PROGRAMMEREN LOGISCH en FUNCTIONEEL Ik zeg wat ik denk!
Functioneel programmeren Een snelle herhaling…. Functie-definitie static int kwad (int x) { return x*x ; } kwad x = x * x Haskell kwad :: Int  Int.
Definitie LL(1) Een grammatica is LL(1) nAls je op grond van het eerstvolgende input-symbool kunt kiezen uit alternatieven Formeel: nAls de lookahead-sets.
(S)DT Haskell Functioneel programmeren.
(S)DT Haskell Deel 2 list comprehensions, types en type klassen, programma transformatie, I/O.
Definitie Taal van een grammatica nZij grammatica G = ( T, N, R, S ) nde taal van G is { z  T* | S  * z } L(G)
Tentamen vraag 1 nElke reguliere zin is ook contextvrij nElke reguliere taal is ook contextvrij nElke contextvrije grammatica is ook regulier nonsens “regulier”
eval (Add x y) = add (eval x) (eval y)
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
Java & het Web Programma: 3rd party libraries Standard actions (E)xpression (L)anguage.
Eerste deeltentamen nNagekeken werk ligt voor in de zaal nNeem je eigen werk mee: in het college wordt het besproken nVragen over de beoordeling: in de.
Les 3 - Operators Workshop Php Basic. ICT Academy Php Basic Content Operators Wiskundig Toewijzing Vergelijking.
IF() ELSE() LES 4: VOORWAARDEN. BOOL Een variabele die slechts 2 mogelijke waarden kan hebben: true(waar) of false(niet waar) duid je aan met bool bool.
Informatie beoordelen If else Switch En Wiskunde.
(de eenvoudige versie).   Teken een rechthoek voor het speelveld.  Maak 2 cirkels die je via de toetsen ASWD (voor speler 1) of de pijltjestoetsen.
Berekening van de Orde Van een Algoritme
Recursie in de wiskunde
Gameprogrammeren: Keuzeopdrachten
Hoofdstuk 9.2 Strings.
Gameprogrammeren: Expressies
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Tinpro015b-les3 Hfdst 3,4 Meer operatoren Functies.
Voorbeeld: Simulatie van bewegende deeltjes
Voortborduren op eerder gedaan werk
-calculus versus Scheme
Implementatie Zoekboom
Sharing.
TOP met iTasks 2.
Gameprogrammeren: Arrays
Transcript van de presentatie:

Functies op Proposities evalueer:: Bedeling  Prop  Bool tautologie:: Prop  Bool contradictie:: Prop  Bool equivalentie:: Prop  Prop  Bool vervulbaar:: Prop  [Bedeling] eenvoudig:: Prop  Prop normaalvorm:: Prop  Prop toon:: Prop  String ontleed:: String  Prop

Functies voor ontleden type Parser a= String  [(String,a)] symbol :: String  Parser String seq:: Parser a  Parser b  Parser (a,b) orelse :: Parser a  Parser a  Parser a haakjes :: Parser Tree data Expr = Con Int | Var String |.... expr, factor :: Parser Expr expr = foldr gen factor [addis, multis]

Vandaag nUitwerking proeftentamen tentamen is “open appendix D” ! nVergelijking

Vraag 1 nWat is het type van A.[Bool] B.[Int  Bool] C.[Int]  [Bool] D.typeringsfout filter div [1,2,3] filter:: ( a  Bool )  [a]  [a] div:: (Int  (Int  Int)) [1,2,3] :: [Int]

Vraag 2 nWat is niet equivalent aan A.all p = and. map p B.all p = and (map p) C.all p xs = (and. map p) xs D.all = \p xs  and (map ps xs) all p xs = and (map p xs)

Vraag 3 nWat is de waarde van A.[False, True, False, True] B.[12, 72] C.[True, False, True, False] D.[10, 4] filter ( (/=0). (\x  x`mod`3)) [12,10,72,4] [0, 1, 0, 1]  [ 10, 4 ]

Vraag 4 nWat is type van A.[Char]  [String] B.[String] C.[Char]  [Char] D.String map box “de zon schijnt” box :: Char  String

Vraag 5 nWat is de waarde van A.[3, 4, 2, 2, 3, 1] B.[0, 0, 0, 0, 0, 0] C.[3, 4, 2] D.[3, 2, 4, 3, 2, 1] [ div x y | x  [10,12,6], y  [3..4] div 10 3 div 10 4 div 12 3 div 12 4 div 6 3 div 6 4

Vraag 6 nWat is type van A.MyList Char B.Char  MyList Char C.a  MyList a D.typeringsfout Cons ’a’ data MyList a = Cons (MyList a) a | Nil

Vraag 7 nSchrijf vaakste :: [Int]  Int vaakste xs = where tel e =filter (==e) xslength ( ) map tel xsmaximum ( ) filter xs ((==m). tel)head ( ) m =

Vraag 8 nSchrijf elemBoom die kijkt of een waarde voorkomt in een zoekboom elemBoom :: a  (Boom a)  Bool data Boom a = Blad | Tak a (Boom a) (Boom a) (a  a  Ordering)  elemBoom cmp e Blad = elemBoom cmp e (Tax x li re) = False cmp e xf ( ) where f LT = f EQ = f GT = True elemBoom cmp e li elemBoom cmp e re

Vraag 9 nSchrijf length met behulp van foldr length ::[a]  Int length = foldr where op e op x r= e= 1 + r 0 length = foldr (\ x r  1+r) 0

Vraag 10 nSchrijf eval :: [(String,Int)]  Expr  Int data Expr = ConstInt | VarString | PlusExpr Expr | MaalExpr Expr eval t (Const i) = eval t (Var s) = eval t (Plus a b) = eval t (Maal a b) =

Functie-aanroep sqrt 2.0 sqrt (exp 1.0) (sqrt 2.0) (sqrt (exp 1.0))

Functies / operatoren f x <= y x + y*z x * (y+z) a+b+c+d+e (f 1 2) (+ 1 2) (<= x y) (+ x (* y z)) (* x (+ y z)) (+ a b c d e)

Lijsten [1, 2, 3] [ ] length [1,2,3] 1:2:3:4:[] [1,2,3] ++ [4,5] ’ (1 2 3) ( ) (length ’(1 2 3)) (cons 1 (cons 2 (cons 3 (cons 4 ( ) ) ) ) ) (append ’(1 2 3) ’(4 5))

Functies definiëren kwadraat x = x * x (defun kwadraat (x) (* x x) ) boven n k = fac n / (fac k * fac (n-k)) (defun boven (n k) ( / (fac n) (* (fac k) (fac (- n k)))))

Gevalsonderscheid signum x | x < 0 = -1 | x==0= 0 | x > 0= 1 (defun signum (x) (cond ( (< x 0) -1) ( (==x 0) 0) ( (> x 0) 1))) lengte [ ] = 0 lengte (x:xs) = 1 + lengte xs (defun lengte (xs) (cond ( (null xs) 0) ( true (+ 1 (lengte (rest xs))))))

Oneindige lijsten repeat x = x : repeat x (defun repeat (x) (cons x (repeat x))) > repeat 3 [3,3,3,3,3,3,3,3,3,3,3 > (repeat 3) Stack overflow > head (repeat 3) 3 > (first (repeat 3)) Stack overflow lazy eager

Typering 1 <= ’a’(<= 1 ’a ) 2 <= 3 || 1 <= ’a’ (or (<= 2 3 ) (<= 1 ’a )) compile- fout runtime- fout OK ! typering beschermt programma programma kan verborgen fouten hebben

Typering van lijsten [1, 2, 3] (1, ”aap”) ’(1 2 3) ’(1 ”aap”) :: [Int] :: (Int,Str) [[1,2,3],[4,5]] ::[[Int]] :: list ’(’(1 2 3) ’(4 5)) :: list [ 1,[4,5] ] :: error ’( 1 ’(4 5)) :: list Tak 3 Blad Blad :: Boom Int ’( 3 ( ) ( ) ) :: list

Typering van lijsten zoek :: (a  a  Ord)  [(a,b)]  a  b zoek :: (function list atom)  atom

Vergelijking nHandige notaties (definitie, patroon, lijst) nSterk getypeerd, at compile-time nLijsten, tupels, bomen nLazy evaluatie nZuiver functioneel n Weinig notaties, veel haakjes n Zwak getypeerd, at run-time n Lijsten, lijsten, lijsten n Eager evaluatie n Side-effects

Vergelijking nProgramma: definitie van functies n Programma: definitie van relaties (oftewel predicaten ) drie x = 3drie (x, 3). f x = h (g x) f (x, z)  g (x, y)  h (y, z).

Lijsten [1, 2, 3] [5] [ ] [1, 2, 3] [5] [ ] ( x : xs )[ x | xs ] [ x:xs ][ [x|xs] ] =

Patronen append ([ ], ys, ). append ( [x|xs], ys, ) . ys [ ] ++ ys = ys (x:xs) ++ ys = x : (xs++ys) [x|zs] append (xs,ys,zs) tussenresultaten moeten een naam hebben

Patronen ins (x, [ ], ). ins (x, [y|ys], ) . [x] ins x [ ] = [ x ] ins x (y:ys) | x<y = x : y : ys | x>=y = y : ins x ys x<y [x|y|ys] ins (x, [y|ys], )  x>=y [y|zs]  ins (x,ys,zs).

Gebruik > [1,2] ++ [3,4] [1, 2, 3, 4] > app ([1,2],[3,4],Z). Z = [1, 2, 3, 4] > app (X, Y, [1,2,3]). X=[ ] Y=[1,2,3] X=[1] Y=[2,3] X=[1,2] Y=[3] X=[1,2,3] Y=[ ]

Vergelijking nDefinitie van functies nResultaat van functie gebruiken bij aanroep nParameter  resultaat n Definitie van relaties n Tussenresultaten een naam geven n Twee kanten op bruikbaar! eenrichtingverkeer