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

Τώρα που ξέρουμε ότι κάθε πρόταση του Scheme περιβάλλεται από παρενθέσεις και ότι το όνομα/τελεστής της συνάρτησης καταχωρίζεται πρώτο, χρειάζεται να μάθουμε τη δημιουργία και χρήση μεταβλητών και πώς να δημιουργήσουμε και να χρησιμοποιήσουμε τις συναρτήσεις. Θα ξεκινήσουμε με τις μεταβλητές.

#### 3.2.1. Δήλωση μεταβλητών

Αν και υπάρχουν περισσότερες μέθοδοι για δήλωση μεταβλητών, η προτιμώμενη μέθοδος είναι η χρήση της δομής let*. Εάν ξέρετε άλλες γλώσσες προγραμματισμού, αυτή η δομή είναι ισοδύναμη με τον ορισμό μιας λίστας τοπικών μεταβλητών και μια εμβέλεια στην οποία είναι ενεργή. Π.χ., για να δηλώσετε δύο μεταβλητές, a και b, αρχικοποιημένες στο 1 και 2, αντίστοιχα, πρέπει να γράψετε:

            (let*
               (
                  (a 1)
                  (b 2)
               )
               (+ a b)
            )

ή σε μια γραμμή:

    (let* ( (a 1) (b 2) ) (+ a b) )

| Σημείωση
Πρέπει να γράψετε όλο αυτό σε μια γραμμή εάν χρησιμοποιείται το παράθυρο κονσόλας. Γενικά, όμως, θα θέλετε να υιοθετήσετε μια παρόμοια πρακτική εσοχής για να κάνετε τα σενάρια σας πιο ευανάγνωστα. Θα μιλήσουμε λίγο περισσότερο για αυτό στην ενότητα του κενού διαστήματος.

Αυτό δηλώνει δύο τοπικές μεταβλητές, a και b, τις αρχικοποιεί, έπειτα τυπώνει το άθροισμα των δύο μεταβλητών.

#### 3.2.2. Τι είναι τοπική μεταβλητή;

Θα παρατηρήσατε ότι γράψαμε την άθροιση `(+ a b)` μέσα στις παρενθέσεις της έκφρασης `let*` και όχι μετά από αυτήν.

This is because the `let*` statement defines an area in your script in which the declared variables are usable; if you type the `(+ a b)` statement after the `(let* …)` statement, you'll get an error, because the declared variables are only valid within the context of the `let*` statement; they are what programmers call local variables.

#### 3.2.3. Η γενική σύνταξη του `let*`

Η γενική μορφή της πρότασης `let*` είναι:

            (let* ( μεταβλητές )
              εκφράσεις )

where variables are declared within parens, e.g., `(a 2)`, and expressions are any valid Scheme expressions. Remember that the variables declared here are only valid within the `let*` statement — they're local variables.

#### 3.2.4. Κενό διάστημα

Previously, we mentioned the fact that you'll probably want to use indentation to help clarify and organize your scripts. This is a good policy to adopt, and is not a problem in Scheme — white space is ignored by the Scheme interpreter, and can thus be liberally applied to help clarify and organize the code within a script. However, if you're working in Script-Fu's Console window, you'll have to enter an entire expression on one line; that is, everything between the opening and closing parens of an expression must come on one line in the Script-Fu Console window.

#### 3.2.5. Απόδοση μιας νέας τιμής σε μια μεταβλητή

Αφού αρχικοποιήσατε μια μεταβλητή, ίσως χρειαστεί να αλλάξετε την τιμή της αργότερα στο σενάριο. Χρησιμοποιήστε την πρόταση `set!` για να αλλάξετε την τιμή της μεταβλητής:

            (let* ( (theNum 10) ) (set! theNum (+ theNum theNum)) )

Προσπαθήστε να μαντέψετε τι θα κάνει η πιο πάνω πρόταση, έπειτα συνεχίστε και εισάγετε το στο παράθυρο κονσόλας του Script-Fu.

#### 3.2.6. Συναρτήσεις

Τώρα που μάθατε για τις μεταβλητές, ας δουλέψουμε με μερικές συναρτήσεις. Δηλώνετε μια συνάρτηση με την ακόλουθη σύνταξη:

            (define
               (
                  name
                  param-list
               )
               expressions
            )

όπου `name` είναι το όνομα που δόθηκε στη συνάρτηση , `param-list` είναι μια λίστα ονομάτων παραμέτρων οριοθετημένου χώρου και `expressions` είναι η σειρά των εκφράσεων που η συνάρτηση εκτελεί, όταν καλείται. Π.χ.:

    (define (AddXY inX inY) (+ inX inY) )

`AddXY` είναι το όνομα της συνάρτησης και `inX` και `inY` είναι οι μεταβλητές. Αυτή η συνάρτηση παίρνει τις δύο παραμέτρους της και τις προσθέτει μαζί.

Εάν έχετε προγραμματίσει σε άλλες προστακτικές γλώσσες (όπως C/C++, Java, Pascal, κλ.), ίσως να παρατηρήσατε ότι μερικά πράγματα λείπουν στον ορισμό αυτής της συνάρτησης, όταν συγκρίνετε με άλλες προγραμματιστικές γλώσσες.

- Πρώτα, σημειώστε ότι οι παράμετροι δεν έχουν κανένα «τύπο» (δηλαδή δεν τις δηλώσαμε ως αλφαριθμητικά, ακέραιους κλ.). Το Scheme είναι μια άτυπη γλώσσα. Αυτό είναι εύχρηστο και επιτρέπει τη συγγραφή πιο γρήγορων σεναρίων.

- Second, notice that we don't need to worry about how to «return» the result of our function — the last statement is the value «returned» when calling this function. Type the function into the console, then try something like:

      (AddXY (AddXY 5 6) 4)

3. Μάθημα Script-Fu |  | 3.3. Λίστες, λίστες και πάλι λίστες

Report a bug in GIMP Αναφορά σφάλματος τεκμηρίωσης