FUNKTSIONAALNE PROGRAMMEERIMINE. Skeemid. Eesmärk: esitada riistvara skeeme ja teisi andmevoodiagrammidel baseeruvaid kirjeldusi Haskellis

Σχετικά έγγραφα
Συναρτησιακός Προγραμματισμός 2008 Λύσεις στο Δεύτερο Φύλλο Ασκήσεων

ΚΥΡΙΑ ΜΟΝΤΕΛΑ ΓΛΩΣΣΩΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΖΕΡΔΑΛΗΣ ΣΩΤΗΡΙΟΣ ΤΟ ΟΥΤΙ ΣΤΗ ΒΕΡΟΙΑ (1922-ΣΗΜΕΡΑ) ΘΕΣΣΑΛΟΝΙΚΗ

Μοντέλα Προγραµµατισµού

Πολυμορφισμός και Υπερφόρτωση

Dynamic types, Lambda calculus machines Section and Practice Problems Apr 21 22, 2016

Ορισμός Συναρτήσεων στην ΜL

2 using namespace s t d ; 4 { 12 int t= x ; 6 x=y ; 7 y=t ; 8 } 9 11 { 13 x= y ; 14 y=t ; 15 } {

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ

Προαπαιτούμενες Ασκήσεις 5 ου Εργαστηρίου. Dose stoixeio (integer) : 25 Found stoixeio in position 7 Dose stoixeio (integer) :94 Value not found

ΚΟΙΛΕΣ KAI ΟΙΟΝΕΙ ΚΟΙΛΕΣ ΣΥΝΑΡΤΗΣΕΙΣ. R και καθε αριθμο οριζουμε. Την καμπυλη αδιαφοριας(indifference curve,level set) της f

Σχεδίαση Ψηφιακών Συστημάτων

Ψηθιακά ςζηήμαηα - Διζαγωγή. ΣΔΙ Πάηπαρ, Σμήμα Ηλεκηπολογίαρ Καθ. Π. Βλασόποςλορ

Overview. Transition Semantics. Configurations and the transition relation. Executions and computation

Ψηφιακά Αντικείμενα Μάθημα 1 Δραστηριότητα 1. Προγραμματισμός Φυσικών Συστημάτων. Νέα Ψηφιακά Αντικείμενα

ΛΥΣΕΙΣ ΦΥΛΛΑΔΙΟΥ 1 ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ / Γραμμική Άλγεβρα

ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΠΙΣΤΗΜΟΝΩΝ ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΜΕΛΟΣ IFIP, IOI

x E[x] x xµº λx. E[x] λx. x 2 3x +2

Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας

!#$%!& '($) *#+,),# - '($) # -.!, '$%!%#$($) # - '& %#$/0#!#%! % '$%!%#$/0#!#%! % '#%3$-0 4 '$%3#-!#, '5&)!,#$-, '65!.#%

ΑΣΚΗΣΗ 2: Σχεδίαση και προσομοίωση κυκλωμάτων καταχωρητών και μετρητών

ΑΝΧΣΑΣΟ ΔΚΠΑΗΓΔΤΣΗΚΟ ΗΓΡΤΜΑ ΚΡΖΣΖ-ΖΡΑΚΛΔΗΟ ΣΜΖΜΑ ΖΛΔΚΣΡΟΛΟΓΗΑ

Περαιτέρω για Συναρτήσεις

UNIVERSITY OF CALIFORNIA. EECS 150 Fall ) You are implementing an 4:1 Multiplexer that has the following specifications:

. visual basic. int sum(int a, int b){ return a+b;} : : :

ECE570 Lecture 6: Rewrite Systems

Προβολές και Μετασχηματισμοί Παρατήρησης

Neural'Networks' Robot Image Credit: Viktoriya Sukhanova 123RF.com

Δομημένος Προγραμματισμός

Κεφάλαιο 2: Τυπικές γλώσσες

Αποτελέσματα προόδου

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Εισαγωγή στη Γλώσσα ML. Juan Miró

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 12 : Υποπρογράµµατα 1 ο Φύλλο Εργασιών: Διαδικασίες ΑΠΑΝΤΗΣΕΙΣ

The Full OAT Language Type System

Ευφυής Προγραμματισμός

Εισαγωγή στη Γλώσσα ML

ts s ts tr s t tr r n s s q t r t rs d n i : X n X n 1 r n 1 0 i n s t s 2 d n i dn+1 j = d n j dn+1 i+1 r 2 s s s s ts

17TimeThis.h function returns reference pointer to same object { return *this; }

Γλώσσες Προγραμματισμού Μεταγλωττιστές

Κεφάλαιο 11 Εκφραστικές δυνατότητες της Haskell

ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων

add $t0,$zero, $zero I_LOOP: beq $t0,$s3, END add $t1, $zero,$zero J_LOOP: sub $t2, $s3, $t0 add $t2, $t2, $s1 int i, j, tmp; int *arr, n;

Υπολογιστικά Συστήματα

ΛΥΣΕΙΣ ΘΕΜΑΤΩΝ ΤΕΛΙΚΗΣ ΦΑΣΗΣ Οι παρακάτω λύσεις είναι απολύτως ενδεικτικές

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 2 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

Δομές Δεδομένων & Αλγόριθμοι. Στοίβες. Εργαστήριο Γνώσης & Ευφυούς Πληροφορικής 1

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

Δομημένος Προγραμματισμός

Προγραμματισμός Ι. Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διαδικασίες ΙI. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 5

C 1 D 1. AB = a, AD = b, AA1 = c. a, b, c : (1) AC 1 ; : (1) AB + BC + CC1, AC 1 = BC = AD, CC1 = AA 1, AC 1 = a + b + c. (2) BD 1 = BD + DD 1,

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος Ανοδικές Μέθοδοι Συντακτικής Ανάλυσης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Λύσεις Σειράς Ασκήσεων 5

Κυριάκης - Μπιτζάρος Ευστάθιος Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-2

Τεχνολογίες Υλοποίησης Αλγορίθµων

ΘΕΜΑ Α ΦΑΣΗΣ. Υπολογιστικά Νέφη Ενδεικτικές Απαντήσεις

2. 3. OCaml. Scheme[13] do CPS. On optimization for recursive programs without tailcalls.

1o ΕΠΑΛ- Ε.Κ. Συκεών -Τομέας: Ηλεκτρονικής, Ηλεκτρολογίας και Αυτοματισμού Εκπαιδευτικοί: Μπουλταδάκης Στέλιος Μαυρίδης Κώστας

ΗΥ-150. Προγραμματισμός

Αφαίρεση στον FP. Πολυμορφισμός Συναρτήσεις υψηλότερης τάξης Οκνηρός και Άπληστος Υπολογισμός

Άσκηση 2.1 Να σχεδιαστεί το διάγραµµα ροής πρωτοβάθµιας εξίσωσης της µορφής:

FOSSCOMM ο Συνέδριο Κοινοτήτων Ανοιχτού Λογισμικού Σάββατο 20 Απριλίου Ομάδα Σχολής Ικάρων Εργαστήριο Arduino

Αυτό το κεφάλαιο εξηγεί τις ΠΑΡΑΜΕΤΡΟΥΣ προς χρήση αυτού του προϊόντος. Πάντα να μελετάτε αυτές τις οδηγίες πριν την χρήση.

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Srednicki Chapter 55

Homework 8 Model Solution Section

Πληκτρολόγιο Gaming GK1 Pro

Γ7.1 Επανάληψη ύλης Β Λυκείου. Γ Λυκείου Κατεύθυνσης

Απλή Δομή Επιλογής. Ο κώδικας. //με χρήση μεταβλητών. delay (3000);

What happens when two or more waves overlap in a certain region of space at the same time?

Ergasthriak 'Askhsh 5

είκτες και Πίνακες Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:

Κεφάλαιο : Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα

Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Τι σημαίνουν οι τύποι συναρτήσεων στην ML. Παράδειγμα επισημειώσεων τύπων στην ML. Επισημειώσεις τύπων (type annotations) f : A B σημαίνει:

Κεφάλαιο : Επαναλήψεις (for, do-while)

Γλώσσες προγραµµατισµού. Ανάπτυξη Συστηµάτων Λογισµικού

«Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων» Χειμερινό εξάμηνο Μηχανές Πεπερασμένων Καταστάσεων

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

Kirjeldab kuidas toimub programmide täitmine Tähendus spetsifitseeritakse olekuteisendussüsteemi abil Loomulik semantika

Μεταγλωττιστές. Εργαστήριο 5. Εισαγωγή στο BISON. Γεννήτρια Συντακτικών Αναλυτών. 2 η Φάση Μεταγλώττισης Συντακτική Ανάλυση

«Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων» Χειμερινό εξάμηνο Πακέτα και Συστατικά Στοιχεία (Υποκυκλώματα)

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Rewrite semantics for guarded recursion with universal quantification over clocks

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

Η ΑΝΘΥΦΑΙΡΕΤΙΚΗ ΕΡΜΗΝΕΙΑ ΤΗΣ ΕΞΩΣΗΣ ΤΗΣ ΠΟΙΗΣΗΣ ΣΤΟ ΔΕΚΑΤΟ ΒΙΒΛΙΟ ΤΗΣ ΠΟΛΙΤΕΙΑΣ ΤΟΥ ΠΛΑΤΩΝΟΣ

Η γλώσσα ML σε βάθος. Τι σημαίνουν οι τύποι συναρτήσεων στην ML. Παράδειγμα επισημειώσεων τύπων στην ML. Επισημειώσεις τύπων (type annotations)

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Ενδεικτικές Λύσεις σε Επιλεγμένα Θέματα της C++


Συναρτήσεις-Διαδικασίες

!"!"!!#" $ "# % #" & #" '##' #!( #")*(+&#!', & - #% '##' #( &2(!%#(345#" 6##7

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Matrices and vectors. Matrix and vector. a 11 a 12 a 1n a 21 a 22 a 2n A = b 1 b 2. b m. R m n, b = = ( a ij. a m1 a m2 a mn. def

Καταχωρητες (Registers) Μετρητες (Counters)

Transcript:

Skeemid Eesmärk: esitada riistvara skeeme ja teisi andmevoodiagrammidel baseeruvaid kirjeldusi Haskellis VARMO VENE 1

Skeemid Skeemid koosnevad juhtmetest ja komponentidest Läbi juhtmete voolavad etteantud tüüpi väärtused Komponendid omavad sisend- ja väljundjuhtmeid input a output Kommunikatsioon on sünkroone a b = a b VARMO VENE 2

Skeemid Skeemide konstrueerimine pure unctions composition bypass eedback primitive components VARMO VENE 3

Nooled class Arrow a where pure :: (b -> c) -> a b c b c (>>>) :: a b c -> a c d -> a b d b c g d irst :: a b c -> a (b,d) (c,d) b d c d VARMO VENE 4

Noolte aksioomid pure id >>> = = >>> pure id = = ( >>> g) >>> h = >>> (g >>> h) g h pure (g. ) = pure >>> pure g g VARMO VENE 5

Noolte aksioomid irst (pure ) = pure ( * id) where * g = \(x,y) -> ( x, g y) irst ( >>> g) = irst >>> irst g g irst >>> pure (id * g) = pure (id * g) >>> irst g = g VARMO VENE 6

Noolte aksioomid irst >>> pure st = pure st >>> = irst (irst ) >>> pure assoc = pure assoc >>> irst where assoc ((x,y),z) = (x,(y,z)) VARMO VENE 7

Noolte kombinaatoreid arr :: Arrow a => (b -> c) -> a b c arr = pure returna :: Arrow a => a b b returna = arr id second :: Arrow a => a b c -> a (d,b) (d,c) second = arr swap >>> irst >>> arr swap where swap ~(x,y) = (y,x) d b d c VARMO VENE 8

Noolte kombinaatoreid (***) :: Arrow a => a b c -> a b c -> a (b,b ) (c,c ) *** g = irst >>> second g b b c g c (&&&) :: Arrow a => a b c -> a b d -> a b (c,d) &&& g = arr (\b -> (b,b)) >>> *** g b g c d VARMO VENE 9

Tsüklitega nooled class Arrow a => ArrowLoop a where loop :: a (b,d) (c,d) -> a b c b d c VARMO VENE 10

Konkreetseid nooli Funktsioonid instance Arrow (->) where arr = >>> g = g. irst = \ ~(x,y) -> ( x, y) trace :: ((b,d) -> (c,d)) -> b -> c trace b = let (c,d) = (b,d) in c instance ArrowLoop (->) where loop = trace VARMO VENE 11

Konkreetseid nooli Olekuteisendajad newtype State s i o = ST ((s,i) -> (s,o)) instance Arrow (State s) where pure = ST (id * ) ST >>> ST g = ST (g. ) irst (ST ) = ST (assoc. ( * id). unassoc) instance ArrowLoop (->) where loop (ST ) = ST (trace (unassoc.. assoc)) VARMO VENE 12

Konkreetseid nooli Monaadid newtype Kleisli m a b = Kleisli (a -> m b) instance Monad m => Arrow (Kleisli m) where arr = Kleisli (return. ) Kleisli >>> Kleisli g = Kleisli (\b -> b >>= g) irst (Kleisli ) = Kleisli (\ ~(b,d) -> b >>= \c -> return (c,d)) instance MonadFix m => ArrowLoop (Kleisli m) where loop (Kleisli ) = Kleisli (litm st. mix. ) where x y = (x, snd y) VARMO VENE 13

Konkreetseid nooli Monaadid newtype Kleisli m a b = Kleisli (a -> m b) instance Monad m => Arrow (Kleisli m) where arr = Kleisli (return. ) Kleisli >>> Kleisli g = Kleisli (\b -> b >>= g) irst (Kleisli ) = Kleisli (\ ~(b,d) -> b >>= \c -> return (c,d)) instance MonadFix m => ArrowLoop (Kleisli m) where loop (Kleisli ) = Kleisli (litm st. mix. ) where x y = (x, snd y) VARMO VENE 14

Konkreetseid nooli Striimprotsessorid data Stream a = Cons a (Stream a) zipstr :: (Stream a, Stream b) -> Stream (a,b) zipstr (Cons x xs, Cons y ys) = Cons (x,y) (zipstr (xs,ys)) unzipstr :: Stream (a,b) -> (Stream a, Stream b) unzipstr (Cons (x,y) xys) = (Cons x xs, Cons y ys) where (xs,ys) = unzipstr xys instance Functor Stream where map (Cons x xs) = Cons ( x) (map xs) VARMO VENE 15

Konkreetseid nooli Striimprotsessorid (järg) newtype StrProc b c = SP (Stream b -> Stream c) instance Arrow StrProc where pure = SP (map ) SP >>> SP g = SP (g. ) irst (SP ) = SP (zipstr. ( * id). unzipstr) instance ArrowLoop StrProc where loop (SP ) = SP (loop (unzipstr.. zipstr)) VARMO VENE 16

Konkreetseid nooli Viivitusega nooled class ArrowLoop a => ArrowCircuit a where delay :: b -> a b b instance ArrowCircuit StrProc where delay b = SP (Cons b) VARMO VENE 17

Konkreetseid nooli Näide: alglaetav londur reset const 0 i output next +1 delay 0 counter :: ArrowCircuit a => a Bool Int counter = loop (pure cond >>> pure dup >>> second (pure (+1) >>> delay 0)) where cond (reset,next) = i reset then 0 else next dup x = (x,x) VARMO VENE 18

Konkreetseid nooli Automaadid newtype Auto i o = A (i -> (o,auto i o)) instance Arrow Auto where pure = A (\b -> ( b, pure )) A >>> A g = A (\b -> let (c, ) = b (d,g ) = g c in (d, >>> g )) irst (A ) = A (\(b,d) -> let (c, ) = b in ((c,d), irst )) instance ArrowLoop Auto where loop (A ) = A (\b -> let (~(c,d), ) = (b,d) in (c, loop )) instance ArrowCircuit Auto where delay b = A (\b -> (b, delay b )) VARMO VENE 19

Noolte notatsioon Noolte süntaks exp =... proc pat-> cmd cmd = exp-< exp do { stmt;... ; stmt; cmd } stmt = pat <- cmd cmd rec { stmt;... ; stmt } VARMO VENE 20

Noolte notatsioon Transleerimisreeglid proc p-> -< a = pure(λp a)>>> i FV(p) FV( ) = pure(λp (, a))>>>app otherwise proc p-> do { c } = proc p-> c proc p-> do { p <- c; B } = ((proc p-> c)&&&returna)>>> proc (p, p)-> do { B } proc p-> do { c; B } = proc p-> do {_<- c; B } proc p-> do { rec { A }; B } = returna&&&loop(proc (p, p A )-> do { A;returnA-< (p B, p A )})>>> proc (p, p B )-> do { B } VARMO VENE 21

Alglaetav londur reset const 0 i output next +1 delay 0 counter :: ArrowCircuit a => a Bool Int counter = proc reset -> do rec output <- returna -< i reset then 0 else next next <- delay 0 -< output + 1 returna -< output VARMO VENE 22