Τώρα που ξέρουμε ότι κάθε πρόταση του Scheme περιβάλλεται από παρενθέσεις και ότι το όνομα/τελεστής της συνάρτησης καταχωρίζεται πρώτο, χρειάζεται να μάθουμε τη δημιουργία και χρήση μεταβλητών και πώς να δημιουργήσουμε και να χρησιμοποιήσουμε τις συναρτήσεις. Θα ξεκινήσουμε με τις μεταβλητές.
Αν και υπάρχουν περισσότερες μέθοδοι για δήλωση μεταβλητών, η προτιμώμενη μέθοδος είναι η χρήση της δομής let*. Εάν ξέρετε άλλες γλώσσες προγραμματισμού, αυτή η δομή είναι ισοδύναμη με τον ορισμό μιας λίστας τοπικών μεταβλητών και μια εμβέλεια στην οποία είναι ενεργή. Π.χ., για να δηλώσετε δύο μεταβλητές, a και b, αρχικοποιημένες στο 1 και 2, αντίστοιχα, πρέπει να γράψετε:
(let* ( (a 1) (b 2) ) (+ a b) )
ή σε μια γραμμή:
(let* ( (a 1) (b 2) ) (+ a b) )
![]() |
Σημείωση |
---|---|
Πρέπει να γράψετε όλο αυτό σε μια γραμμή εάν χρησιμοποιείται το παράθυρο κονσόλας. Γενικά, όμως, θα θέλετε να υιοθετήσετε μια παρόμοια πρακτική εσοχής για να κάνετε τα σενάρια σας πιο ευανάγνωστα. Θα μιλήσουμε λίγο περισσότερο για αυτό στην ενότητα του κενού διαστήματος. |
Αυτό δηλώνει δύο τοπικές μεταβλητές, a και b, τις αρχικοποιεί, έπειτα τυπώνει το άθροισμα των δύο μεταβλητών.
Θα παρατηρήσατε ότι γράψαμε την άθροιση (+ 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.
Η γενική μορφή της πρότασης 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.
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.
Αφού αρχικοποιήσατε μια μεταβλητή, ίσως χρειαστεί να αλλάξετε την τιμή της αργότερα στο σενάριο. Χρησιμοποιήστε την πρόταση set!
για να αλλάξετε την τιμή της μεταβλητής:
(let* ( (theNum 10) ) (set! theNum (+ theNum theNum)) )
Προσπαθήστε να μαντέψετε τι θα κάνει η πιο πάνω πρόταση, έπειτα συνεχίστε και εισάγετε το στο παράθυρο κονσόλας του Script-Fu.
Τώρα που μάθατε για τις μεταβλητές, ας δουλέψουμε με μερικές συναρτήσεις. Δηλώνετε μια συνάρτηση με την ακόλουθη σύνταξη:
(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)