eval (Add x y) = add (eval x) (eval y)

Slides:



Advertisements
Verwante presentaties

Advertisements

Inleiding programmeren in C++ Life Science & Technology 26 januari Universiteit Leiden.

Software Architectuur Over de samenhang der dingen = Over de connecties tussen componenten Over de afhankelijkheden tussen modules Over de belangen van.
PHP & MYSQL LES 03 PHP & DATABASES. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Hoofdstuk 10 Onderzoeken met SPSS en MS Excel
Arduino project.
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.
PROS2 Les 11 Programmeren en Software Engineering 2.
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.
Hoofdstuk 6: Controle structuren
1 SOCS Hoofdstuk 1 Computerarchitectuur. 2 Overzicht Eenvoudig C Arrays Functies Records Dynamische gegevenstructuren Macro’s C.
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.
Compositionaliteit, bereik en lambda’s
Hoofdstuk 2 Hallo, C# !.
Hogere-orde functies: herhaald patroon? Parametrizeer! product :: [Int]  Int product [ ]= product (x:xs)= 1 product xs x * and :: [Bool]  Bool and [
Functies op Proposities evalueer:: Bedeling  Prop  Bool tautologie:: Prop  Bool contradictie:: Prop  Bool equivalentie:: Prop  Prop  Bool vervulbaar::
De koektrommel of de grabbelton
Download en installeer de gereedschappen
Natuurlijke-Taalinterfaces week 5 Lambda-termen en Lambda-conversie.
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
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.
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 8 Objecten en klassen.
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
CONTROLESTRUCTUREN (DEEL 1)
Statistische functies (aggregaatfuncties)
Vakgroep Informatietechnologie – SoftwareOntwikkeling 1 SoftwareOntwikkeling 1 Conditionele compilatie in C met de macropreprocessor.
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
Hoofdstuk 5 – Verzameling en functie
SQL ( SERVER ) Les #02: T-SQL. A GENDA Herhaling les 4 Views SELECT…INTO Beheren van tabellen: CREATE ALTER DROP Opdracht voor de volgende les.
Beoordelen leermiddelen
Tircms03-p les 6 Templates. Functietemplates void verwissel(int &x, int &y); { int w=x;x=y;y=w;} Dezelfde functie voor meerdere types heet een functietemplate.
Introductie tot GoF patterns in Java
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.
Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk.
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;
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,
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 Deel 2 list comprehensions, types en type klassen, programma transformatie, I/O.
Graphic novel: globalisering
Definitie Taal van een grammatica nZij grammatica G = ( T, N, R, S ) nde taal van G is { z  T* | S  * z } L(G)
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
 C++ heeft een inheritance mechanisme  Manier om functionaliteit te ‘erfen’ van een parrent class ◦ Polymorphisme ◦ Zoals we het ook in C# kennen.
Variabelen. Wat zijn variabelen? Klassiek: een variabele houdt informatie bij. Klassiek: een variabele houdt informatie bij. bvb: int getal; getal = 5;
Herhaling: He who does not learn from history, is doomed to repeat it.
Variabelen. Wat zijn variabelen? In een programmeertaal zijn er “dingen” nodig die ervoor zorgen dat het programma informatie voor korte of langere tijd.
Les 3 - Operators Workshop Php Basic. ICT Academy Php Basic Content Operators Wiskundig Toewijzing Vergelijking.
Wat is SQL (1)? SQL (Structured Query Language):  is een zeer krachtige taal met een beperkt vocabulaire (aantal ‘woorden’)  is declaratief (‘WAT’ niet.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
(de eenvoudige versie).   Teken een rechthoek voor het speelveld.  Maak 2 cirkels die je via de toetsen ASWD (voor speler 1) of de pijltjestoetsen.
Gameprogrammeren: Objecten en geheugen
Hoofdstuk 9.2 Strings.
Windows-applicatie using System.Windows.Forms; using System.Drawing;
-calculus versus Scheme
Keuzevoorlichting havo wiskunde AB.
Hoofdstuk 4 Kwantitatieve dataverzamelingsmethoden Nel Verhoeven
SQL Les 3 17 February 2019.
Hoofdstuk 10 Onderzoeken met SPSS en MS Excel
Python – For loop + strings
Transcript van de presentatie:

eval (Add x y) = add (eval x) (eval y) Compositionaliteit Een semantiek is compositioneel als de betekenis van een geheel een functie is van de betekenissen van de delen eval (Add x y) = add (eval x) (eval y) Een compositionele semantiek kun je schrijven als fold over de expressie waarbij een algebra vervangingen geeft voor de constructoren

Zelfgemaakt datatype voor bomen data Tree a = Bin (Tree a) (Tree a) | Leaf a Met functies foldTree :: (bbb , ab)Tree a  b foldTree (b,lf) = f where f (Bin le ri) = b (f le) (f ri) f (Leaf x) = lf x foldTree :: Tree a  b foldTree (b,lf) (Bin le ri) = b (foldTree (b,lf) le) (foldTree (b,lf) ri) foldTree (b,lf) (Leaf x) = lf x ( , ) bbb ab

Functies op bomen foldTree :: ( bbb , ab )  Tree a  b Specialisaties: countLeafs :: Tree a  Int countLeafs = foldTree ( (+) , \x1 ) sumLeafs :: Tree Int  Int sumLeafs = foldTree ( (+) , \xx ) listLeafs :: Tree a  [a] listLeafs = foldTree ( (++) , \x[x] )

De essentie van Tree-functies type TreeAlgebra a b = ( bbb , ab ) countLeafsFuns :: ( IntIntInt , aInt ) countLeafsFuns :: TreeAlgebra a Int countLeafsFuns = ( (+) , \x1 ) countLeafs :: Tree a  Int countLeafs = foldTree ( (+) , \x1 ) countLeafs :: Tree a  Int countLeafs = foldTree countLeafsFuns

Tree, TreeAlgebra en functie foldTree data Tree a = Bin (Tree a) (Tree a) | Leaf a type TreeAlgebra a b = ( bbb , ab ) foldTree :: TreeAlgebra a bTree a  b foldTree (b,lf) = f where f (Bin le ri) = b (f le) (f ri) f (Leaf x) = lf x

Voorbeelden van TreeAlgebra type TreeAlgebra a b = ( bbb , ab ) countLeafsFuns :: TreeAlgebra a Int countLeafsFuns = ( (+) , \x1 ) sumLeafsFuns :: TreeAlgebra Int Int sumLeafsFuns = ( (+) , \xx ) listLeafsFuns :: TreeAlgebra a [a] listLeafsFuns = ( (++) , \x[x] )

Hoofdstuk 8: eenvoudige niet-polymorfe versie data Tree = Leaf Int | Bin Tree Tree type TreeAlgebra b = (Intb , bbb) foldTree :: TreeAlgebra bTree  b foldTree (b,lf) = f where f (Leaf x) = lf x f (Bin le ri) = b (f le) (f ri)

Publieksvraag Maak een algebra die het minimum van een Tree bepaalt Maak een algebra die alle bladeren van een Tree vervangt door 0 (geef ook de types aan) data Tree = Leaf Int | Bin Tree Tree

Repmin, versie 1 repmin t = b where b = fold subalg t m = fold minalg t “pass 2” “pass 1” minalg :: Algebra Int minalg = ( \x  x , \m1 m2  min m1 m2 ) subalg :: Algebra Tree subalg = ( \x  Leaf 0 , \b1 b2  Bin b1 b2 ) m

weg met deze globale variabele! Repmin, versie 12 repmin t = b where b = fold subalg t m = fold minalg t minalg :: Algebra Int minalg = ( \x  x , \m1 m2  min m1 m2 ) subalg :: Algebra Tree subalg = ( \x  Leaf m , \b1 b2  Bin b1 b2 ) weg met deze globale variabele!

Repmin, versie 1  2 repmin t = r m where r = fold repalg t m = fold minalg t repmin t = b where b = fold subalg t m = fold minalg t minalg :: Algebra Int minalg = ( \x  x , \m1 m2  min m1 m2 ) repalg :: Algebra (Int  Tree) repalg = ( \x  \m  Leaf m , \r1 r2  \m  Bin (r1 m) (r2 m)) repalg :: Algebra (Int  Tree) repalg = ( \x  Leaf m , \b1 b2  Bin b1 b2 ) repalg :: Algebra (Int  Tree) repalg = ( \x  \m  Leaf m , \b1 b2  \m  Bin b1 b2 )

Passes zijn nu onafhankelijk van elkaar! Repmin, versie 2 repmin t = r m where r = fold repalg t m = fold minalg t Passes zijn nu onafhankelijk van elkaar! minalg :: Algebra Int minalg = ( \x  x , \m1 m2  min m1 m2 ) repalg :: Algebra (Int  Tree) repalg = ( \x  \m  Leaf m , \r1 r2  \m  Bin (r1 m) (r2 m))

één gecombineerde pass met tupelresultaat Repmin, versie 2  3 repmin t = r m where (m,r)= fold tupalg t één gecombineerde pass met tupelresultaat tupalg :: Algebra ( Int , Int  Tree ) tupalg = ( \x  ( x , \m  Leaf m ) , \t1 t2  ( min m1 m2 , \m  Bin (r1 m) (r2 m) ) ) tupalg :: Algebra ( Int , Int  Tree ) tupalg = ( \x  ( x , \m  Leaf m ) , \t1 t2  let (m1,r1) = t1 (m2,r2) = t2 in ( min m1 m2 , \m  Bin (r1 m) (r2 m) ) ) tupalg :: Algebra ( Int , Int  Tree ) tupalg = ( \x  ( x , \m  Leaf m ) , \t1 t2  ) tupalg :: Algebra ( Int , Int  Tree ) tupalg = ( \x  , \t1 t2  ) minalg :: Algebra Int minalg = ( \x  x , \m1 m2  min m1 m2 ) repalg :: Algebra (Int  Tree) repalg = ( \x  \m  Leaf m , \r1 r2  \m  Bin (r1 m) (r2 m))

Repmin, versie 3 repmin t = r m where (m,r)= fold tupalg t Int  (Int,Tree) tupalg :: Algebra ( Int , Int  Tree ) tupalg = ( \x  ( x , \m  Leaf m ) , \t1 t2  let (m1,r1) = t1 (m2,r2) = t2 in ( min m1 m2 , \m  Bin (r1 m) (r2 m) ) ) tupalg :: Algebra ( Int , Int  Tree ) tupalg = ( \x  ( x , \m  Leaf m ) , \t1 t2  let (m1,r1) = t1 (m2,r2) = t2 in ( min m1 m2 , \m  Bin (r1 m) (r2 m) ) )

Repmin, versie 3  4 repmin t = where f = fold meralg t repmin t = b (m,b) = f m repmin t = r m where (m,r)= fold tupalg t meralg :: Algebra (Int  (Int,Tree)) meralg = ( \x  \m  ( x , Leaf m ) , \f1 f2 \m let (m1,b1) = f1 m (m2,b2) = f2 m in ( min m1 m2 , Bin b1 b2 ) ) meralg :: Algebra (Int  (Int,Tree)) meralg = ( \x  \m  ( x , Leaf m ) , \f1 f2 \m  ( min m1 m2 , Bin b1 b2 ) ) meralg :: Algebra (Int  (Int,Tree)) meralg = ( \x  \m  , \f1 f2 \m  ) meralg :: Algebra (Int  (Int,Tree)) meralg = ( \x  , \f1 f2  ) meralg :: Algebra (Int  (Int,Tree)) meralg = ( \x  \m  ( x , Leaf m ) , \f1 f2 \m  )