## 3. Μάθημα Script-Fu

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

| Σημείωση
Αυτή η ενότητα προσαρμόστηκε από ένα μάθημα γραμμένο για το εγχειρίδιο χρήστη του GIMP 1 από τον Mike Terry.

### 3.1. Εξοικείωση με το Scheme

#### 3.1.1. Ξεκίνημα με το Scheme

Το Σχέδιο είναι μια διάλεκτος της οικογένειας γλωσσών προγραμματισμού Lisp. Το GIMP χρησιμοποιεί το TinyScheme, το οποίο είναι ένας ελαφρύς διερμηνέας ενός υποσυνόλου του λεγόμενου προτύπου R5RS.

Το πρώτο πράγμα για να μάθετε είναι ότι:

> Κάθε πρόταση στο Scheme Περιβάλλεται από παρενθέσεις ().

Το δεύτερο που χρειάζεται να ξέρετε είναι ότι:

> Η συνάρτηση όνομα/χειριστής είναι πάντοτε το πρώτο στοιχείο στις παρενθέσεις και τα υπόλοιπα στοιχεία είναι παράμετροι στη συνάρτηση.

However, not everything enclosed in parentheses is a function — they can also be items in a list — but we'll get to that later. This notation is referred to as prefix notation, because the function prefixes everything else. If you're familiar with postfix notation, or own a calculator that uses Reverse Polish Notation (such as most HP calculators), you should have no problem adapting to formulating expressions in Scheme.

Το τρίτο που πρέπει να καταλάβετε είναι ότι:

> Οι μαθηματικοί τελεστές θεωρούνται επίσης συναρτήσεις και έτσι καταλογοποιούνται πρώτοι όταν γράφετε μαθηματικές εκφράσεις.

Αυτό ακολουθεί λογικά από την προθεματική σημειογραφία που μόλις αναφέραμε.

#### 3.1.2. Παραδείγματα προθεματικής, ενθεματικής και επιθεματικής σημειογραφίας

Ιδού μερικά γρήγορα επεξηγηματικά παραδείγματα των διαφορών μεταξύ προθεματικής, ενθεματικής, και επιθεματικής σημειογραφίας. Θα προσθέσουμε το 1 και το 23 μαζί:

- Προθεματική σημειογραφία: `+ 1 23` (ο τρόπος που το Scheme θέλει)

- Ενθεματική σημειογραφία: `1 + 23` (ο τρόπος που «κανονικά» το γράφουμε)

- Μεταθεματική σημειογραφία: `1 23 +` (ο τρόπος που πολλές αριθμομηχανές HP θέλουν)

#### 3.1.3. Πρακτική στο Scheme

Στο GIMP, επιλέξτε Φίλτρα → Ανάπτυξη → Script-Fu → Κονσόλα Script-Fu από το κύριο μενού. Αυτό θα ξεκινήσει το παράθυρο της Κονσόλας Script-Fu, το οποίο μας επιτρέπει να εργαστούμε διαδραστικά στο Scheme.

#### 3.1.4. Το παράθυρο κονσόλας Script-Fu

Στο κάτω μέρος αυτού του παραθύρου υπάρχει ένα πεδίο εισαγωγής κειμένου για εντολές. Εδώ, μπορούμε να δοκιμάσουμε απλές εντολές Scheme διαδραστικά. Ας ξεκινήσουμε εύκολα και ας προσθέσουμε μερικούς αριθμούς:

    (+ 3 5)

Γράφοντας αυτό και πατώντας το πλήκτρο Εισαγωγή παράγεται η αναμενόμενη απάντηση 8 στο κεντρικό παράθυρο.

Σχήμα 13.1. Χρήση κονσόλας Script-Fu.

Η συνάρτηση «+» μπορεί να λάβει περισσότερα ορίσματα, ώστε να μπορούμε να προσθέσουμε περισσότερους από έναν αριθμούς:

    (+ 3 5 6)

Αυτό επίσης παράγει την αναμενόμενη απάντηση 14.

So far, so good — we type in a Scheme statement and it's executed immediately in the Script-Fu Console window. Now for a word of caution…

#### 3.1.5. Προσοχή για επιπλέον παρενθέσεις

If you're like me, you're used to being able to use extra parentheses whenever you want to — like when you're typing a complex mathematical equation and you want to separate the parts by parentheses to make it clearer when you read it. In Scheme, you have to be careful and not insert these extra parentheses incorrectly. For example, say we wanted to add 3 to the result of adding 5 and 6 together:

    3 + (5 + 6) + 7 = ;

Ξέροντας ότι ο τελεστής + δέχεται μια λίστα αριθμών για πρόσθεση, ίσως προσπαθήσετε να μετατρέψετε το πιο πάνω στο εξής:

    (+ 3 (5 6) 7)

However, this is incorrect — remember, every statement in Scheme starts and ends with parens, so the Scheme interpreter will think that you're trying to call a function named «5» in the second group of parens, rather than summing those numbers before adding them to 3.

Ο σωστός τρόπος να γράψετε την παραπάνω πρόταση θα ήταν:

    (+ 3 (+ 5 6) 7)

#### 3.1.6. Βεβαιωθείτε ότι έχετε το κατάλληλο διάκενο, επίσης

Εάν είστε εξοικειωμένος με άλλες προγραμματιστικές γλώσσες, όπως C/C++, Perl ή Java, ξέρετε ότι δεν χρειαζόσαστε λευκά κενά γύρω από τους μαθηματικούς τελεστές για να μορφοποιήσετε κατάλληλα μια έκφραση:

            3+5, 3 +5, 3+ 5

Όλα αυτά είναι αποδεκτά από τους μεταγλωττιστές C/C++, Perl and Java. Όμως, αυτό δεν ισχύει για το Scheme. Πρέπει να έχετε ένα κενό μετά από ένα μαθηματικό τελεστή (ή οποιοδήποτε άλλο όνομα συνάρτησης ή τελεστή) στο Scheme για να είναι σωστά ερμηνεύσιμο από τον ερμηνευτή του Scheme.

Εξασκηθείτε λίγο με απλές μαθηματικές εξισώσεις στην κονσόλα Script-Fu μέχρι να είστε ολότελα άνετος με αυτές τις αρχικές σκέψεις.

2.4. Διάφορα είδη Script-Fus |  | 3.2. Μεταβλητές και συναρτήσεις

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