View on GitHub

dituoi_agp

Αρχές Γλωσσών Προγραμματισμού

Μεταβλητές και συναρτήσεις

Μεταβλητές

Prelude> pi
3.141592653589793

Αρχεία πηγαίου κώδικα

r = 5.0

varfun.hs

Prelude> :load varfun.hs
[1 of 1] Compiling Main             ( varfun.hs, interpreted )
Ok, one module loaded.
*Main> pi * r ^ 2
78.53981633974483

Σχόλια

Μιας γραμμής ξεκινούν με --

Πολλών γραμμών μέσα σε {- σχόλια -}

Μεταβλητές σε προστακτικές γλώσσες

Οι προστακτικές γλώσσες αντιμετωπίζουν τις μεταβλητές ως τροποποιήσιμες θέσεις στη μνήμη του υπολογιστή, σε αναλογία με τη φυσική λειτουργία του υπολογιστή. Σε αντίθεση στο συναρτησιακό προγραμματισμό οι μεταβλητές είναι αντικείμενα υψηλότερου επιπέδου.

Ο ακόλουθος κώδικας θα επιστρέψει μήνυμα σφάλματος, όταν μεταγλωττιστεί διότι μια μεταβλητή στην Haskell ορίζεται μόνο μια φορά και δεν μπορεί να αλλάξει, δηλαδή είναι immutable (μη-τροποποιήσιμες).

r = 1
r = 2

multiple_declarations_of_var.hs

Συναρτήσεις

Μια συνάρτηση λαμβάνει μια τιμή ορίσματος και επιστρέφει ένα αποτέλεσμα. Παράδειγμα της συνάρτησης area για τον υπολογισμό του εμβαδού ενός κύκλου με ακτίνα r.

area r = pi * r ^ 2

area.hs

Εφαρμογή της συνάρτησης (apply). Η εφαρμογή μιας συνάρτησης σημαίνει ότι αντικαθίσταται το αριστερό τμήμα του ορισμού της συνάρτησης με το δεξιό τμήμα του ορισμού της συνάρτησης.

Prelude> :load area.hs
*Main> area 5
78.53981633974483

Οι συναρτήσεις έχουν προτεραιότητα έναντι τελεστών όπως το + και το *.

*Main> area 5 + 5
83.53981633974483
*Main> area (5 + 5)
314.1592653589793

Επιπλέον παραδείγματα συναρτήσεων

double x = 2 * x
quadruple x = double (double x)
square x = x * x
half x = x / 2

double_quad.hs

Συναρτήσεις με περισσότερες παραμέτρους

areaTriangle b h = (b * h) / 2

area_triangle.hs

Τοπικοί ορισμοί

Προτάσεις where

heron a b c = sqrt (s * (s - a) * (s - b) * (s - c))
    where
    s = (a + b + c) / 2

heron.hs

Εμβέλεια

Οι μεταβλητές εντός μιας εμβέλειας δεν αλλάζουν