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

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

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

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

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

Διαδικασιακός Προγραμματισμός

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Κεφάλαιο 1. Τι θα μάθουμε σήμερα: -AND, OR, NOT. -Ενσωματωμένες συναρτήσεις. -Μαθηματικοί τελεστές -ΤΕΛΕΣΤΕΣ DIV ΚΑΙ MOD. -Προτεραιότητα πράξεων

Εισαγωγή στη γλώσσα προγραμματισμού C++

Συναρτησιακός Προγραμματισμός. Εισαγωγικές Έννοιες

Αντικειμενοστρεφής Προγραμματισμός -Python. Κ.Π. Γιαλούρης

Κεφάλαιο 10 H γλώσσα συναρτησιακού προγραμματισμού Haskell Τα βασικά

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Στοιχειώδης προγραμματισμός σε C++

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Ονόματα και Εμβέλεια. Wassily Kandinsky, Black lines, 1913

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές

Pascal Βασικοί τύποι δεδοµένων

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

A2. Να γράψετε για κάθε περίπτωση τον αριθμό της πρότασης και δίπλα το γράμμα που δίνει τη σωστή επιλογή.

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Προγραμματισμός Η/Υ. Ενότητα 4: Εντολές Επιλογής

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

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

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

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Υπολογισμός - Εντολές Ελέγχου

Εμβέλεια. Παραδείγματα. Παραδείγματα. Μπλοκ (blocks)

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Προγραμματισμός ΙI (Θ)

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

Εισαγωγή στον Προγραμματισμό

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

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

Διδάσκων: Παναγιώτης Ανδρέου

Μεταγλωττιστές Βελτιστοποίηση

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

Ανάπτυξη και Σχεδίαση Λογισμικού

Η γλώσσα ML σε βάθος. Γλώσσες Προγραμματισμού Ι. Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας

Α3. Ποια είναι τα πλεονεκτήματα του Δομημένου προγραμματισμού; (Μονάδες 10)

Ανάπτυξη και Σχεδίαση Λογισμικού

Η γλώσσα ML σε βάθος. Joan Miró, El Carnaval del Arlequín, Κωστής Σαγώνας Νίκος Παπασπύρου

ΚΕΦΑΛΑΙΟ 10 ΕΝΤΟΛΕΣ ΕΠΙΛΟΓΗΣ (ή εντολές Ελέγχου και Επιλογής ή εντολές Επιλογής και Απόφασης)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Pascal. 15 Νοεμβρίου 2011

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

Ανάπτυξη και Σχεδίαση Λογισμικού

Δομές Δεδομένων (Data Structures)

Στοιχεία προτασιακής λογικής

Δώστε έναν επαγωγικό ορισμό για το παραπάνω σύνολο παραστάσεων.

Διαδικασιακός Προγραμματισμός

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013

Μεταγλωττιστές Βελτιστοποίηση

Τι σηµαίνουν οι τύποι συναρτήσεων στην ML. Παράδειγµα επισηµειώσεων τύπων στην ML. Επισηµειώσεις τύπων (type annotations) Σύνταξη ταιριάσµατος

Εισαγωγή στη Matlab 2 Εισαγωγή στην Αριθμητική Ανάλυση Διδάσκων: Γεώργιος Ακρίβης Βοηθός: Δημήτριος Ζαβαντής

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

Σειρά Προβλημάτων 5 Λύσεις

Εισαγωγή στον Προγραμματισμό

Εντολές επιλογής Επαναλήψεις (if, switch, while)

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

2.1. Εντολές Σχόλια Τύποι Δεδομένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Η γλώσσα προγραμματισμού EEL

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

Θέματα Προγραμματισμού Η/Υ

ΜΑΗΣ ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ

Πληροφορική ΙΙ Θεματική Ενότητα 5

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Βασικές έννοιες προγραμματισμού

Εισαγωγή στον Προγραμματισμό

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

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

Προγραμματισμός ΙI (Θ)

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

Δομημένος Προγραμματισμός (ΤΛ1006)

Transcript:

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

Ονόματα και δεσμεύσεις: ησυνάρτησηval Τα ονόματα σταθερών δεσμεύονται με τιμές σταθερών μέσω ορισμών της συνάρτησης val. val codeof0 = ord 0 val codeof9 = codeof0 + 9 Τα ονόματα (codeof0, codeof9) δεσμεύονται στις ακέραιες τιμές 48 και 57 (ησυνάρτησηord παράγει τον κώδικα ASCII των χαρακτήρων στους οποίους εφαρμοζεται). To = ορίζει τη δέσμευση συγκεκριμένου ονόματος σε τιμή, και επιπλέον λειτουργικά χρησιμοποιείται για την αντικατάσταση ονόματος/τιμής, όταν γίνεται υπολογισμός εκφράσεων. Ένα όνομα σταθεράς μπορεί να θεωρηθεί παρόμοιο με μεταβλητή (αλλά προσοχή, δεν είναι μεταβλητή μνήμης, όπως συμβαίνει στις διαδικασιακές γλ. προγ.).

Περιβάλλον και εμβέλεια Περιβάλλον: ένα σύνολο από δεσμεύσεις ονομάτων σε τιμές, δηλ. ορισμών της συνάρτησης val. Οι ορισμοί της val επεκτείνουν και τροποποιούν το περιβάλλον. Oι εκφράσεις υπολογίζονται μέσα σε συγκεκριμένο περιβάλλον. Εμβέλεια ορισμού: το περιβάλλον μέσα στο οποίο θεωρείται ισχύων ο ορισμός.

Ορισμός συναρτήσεων : fun Για να οριστεί μια νέα συνάρτηση πρέπει να της αποδοθεί όνομα, και να οριστεί δηλωτικά, οκανόνας υπολογισμού της. Συνήθως συσχετίζεται με τη συνάρτηση μια παράμετρος (ένα προσωρινό όνομα για το όρισμά της). fun double x = x + x fun treble x = x * 3 fun sixtimes x = double (treble x) H συνάρτηση fun χρησιμοποιείται για να οριστούν συναρτήσεις με παραμέτρους. Μπορεί να οριστεί μια συνάρτηση και μέσω της val, όταν δεν έχει παραμέτρους (σταθερές συναρτήσεις). Η εμβέλεια της παραμέτρου ενός ορισμού συνάρτησης περιορίζεται στον κανόνα υπολογισμού της συνάρτησης. Δηλαδή οι παράμετροι που εμφανίζονται σε διαφορετικούς ορισμούς συναρτήσεων δεν συσχετίζονται.

Παραδείγματα ορισμού συναρτήσεων (τύποι;) fun even n = (n mod 2 = 0) fun digit d = ord d >= codeof0 & ord d =< codeof9 fun uppercase s = ord s >= ord A & ord s =< ord Z fun lowercase s = ord s >= ord a & ord s =< ord z fun letter s = lowercase s or uppercase s fun charofdigit n = chr (n + codeof0)

Συναρτήσεις με πλειάδες ορισμάτων fun evernprod (x, y) = even (x * y) fun eithereven (x, y) = even x or even y fun sumbetween (m, n) = (( m+ n) * (abs(m-n) +1)) div 2 fun avepair (x, y) = (x + y) div 2 fun fst (x, y) = x fun snd (x, y) = y fun sumdiff (x, y) = (x+y, abs(x-y))

ΥπόΣυνθήκηΕκφράσεις: if then else Μαθηματικά συχνά ορίζουμε συναρτήσεις μέσω συνθηκών: min pair ( x, y) = x if x < y y otherwise Η ΜL διαθέτει δομή if then else fun minpair (x, y) = if x < y then x else y

Τύπος υπό συνθήκη εκφράσεων if E1: bool E2 : T E3: T E1 then E2 else E3: T Προσοχή: Ε2 και Ε3 ίδιου τύπου, διαφορετικά ο τύπος της έκφρασης θα έπρεπε να εξαρτηθεί από την έκβαση του ελέγχου της συνθήκης. Ισχύει if true then E2 else E3 = E2 if false then E2 else E3 = E3

Ενσωματωμένες υπό συνθήκη εκφράσεις Μπορούμε να ενσωματώσουμε υπό συνθήκη εκφράσεις σε άλλες για να αναπαραστήσουμε πολλαπλές διακλαδώσεις υπολογισμού. Όπου n, m τύπου int και s1, s2 τύπου string: m + (if m = 0 then n else n m) if m = n then m else if m < n then avepair (m, n) else (m + n) div 2 size (if s1 = s2 then s1^s2 else s1^s1)

Eναλλακτικός τρόπος ορισμού συναρτήσεων με πολλαπλά ορίσματα fun minmaxpair (x, y) = if x < y then (x, y) else (y, x) fun maxpair anypair = snd(minmaxpair anypair) Tι είναι το anypair στον ορισμό αυτό; Υπολογίστε maxpair (3, 6)

fun not true = false not false = true fun true or b = true false or b = b fun true & b = b false & b = false Εναλλακτικός τρόπος ορισμού συναρτήσεων με περιπτώσεις Αντί για υποθετικές εκφράσεις, μπορούμε να ορίσουμε μια συνάρτηση παραθέτοντας διαφορετικές περιπτώσεις, ανάλογα με συγκεκριμένες σταθερές τιμές που μπορεί να δεχτούν ως όρισμα. Oι περιπτώσεις διαχωρίζονται με

Ιnfix και Prefix μορφές fun not true = false not false = true fun true or b = true false or b = b fun true & b = b false & b = false fun or (true, b) = true or (false, b) = b fun & (true, b) = b & (false, b) = false

Yπολογισμός εκφράσεων με «ταίριασμα» παραμέτρων Όταν υπολογίζονταιεκφράσεις, οι σταθερές τιμές για τις οποίες γίνεται ο υπολογισμός «ταιριάζουν»/ενοποιούνται με τις παραμέτρους που περιέχονται στον ορισμό της συνάρτησης. (not true) or false = false or false (1 η περίπτωση not) false (2 η περίπτωση or, b / false)

Eνοποίηση παραμέτρων Μπορούμε να χρησιμοποιήσουμε όσες περιπτώσεις θέλουμε για τον ορισμό συναρτήσεων, και όποιο συνδυασμό παραμέτρων επιθυμούμε (σταθερές, πλειάδες, μεταβλητές), αρκεί: οι παράμετροι να έχουν τύπο συμβατό με τον τύπο του πεδίου ορισμού της συνάρτησης οι περιπτώσεις να παρατίθενται όλες, δηλ. οι παράμετροι να καλύπτουν όλα τα δυνατά ορίσματα να μην υπάρχει ασάφεια ως προς το ποια περίπτωση ισχύει σε περίπτωση που περισσότερες περιπτώσεις καλύπτουν τα ορίσματα της συνάρτησης, υποθέτουμε ότι υπάρχει από πάνω προς τα κάτω προτεραιότητα στις περιπτώσεις.

Παράδειγμα Υπολογισμός σε περιβάλλον, ορισμός με περιπτώσεις val first = A val second = B val third = C val coffee = coffee val tea = tea val water = water fun chose first = coffee chose second = tea chose third = water fun value coffee = 1 value tea = 2 value water =0 value coffee = 3 fun atp (choice, quantity) = quantity * value chose choice Υπολογίστε atp (A, 2) + atp (B, 1)

Αναδρομικοί ορισμοί: αυτοαναφορά stringcopy : int x string string Για κάθε n >=0 και string s, stringcopy (n, s) παράγει string από τη συνένωση n αντιγράφων του s. stringcopy(3, xyz )= xyzxyzxyz. fun stringcopy (n, s) = if n=0 then else stringcopy(n-1, s) ^ s

Υπολογισμός με αναδρομικό ορισμό: επανεγγραφή με αντικατάσταση, εμβέλεια stringcopy (2, ab ) = if 2 = 0 then else stringcopy (2-1, ab ) ^ ab = if false then else stringcopy (1, ab ) ^ ab =stringcopy (1, ab ) ^ ab = (if 1=0 then else stringcopy (1-0, ab ) ^ ab ) ^ ab = (if false then else stringcopy (0, ab ) ^ ab ) ^ ab =(stringcopy( 0, ab ) ^ ab ) ^ ab = ((if 0 = 0 then else stringcopy (0-1, ab ) ^ ab ) ^ ab ) ^ ab = ((if true then else stringcopy (0-1, ab ) ^ ab ) ^ ab ) ^ ab = ( ^ ab ) ^ ab = ab ^ ab = abab