3. Μάθημα Script-Fu

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

[Σημείωση] Σημείωση

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

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

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

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

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

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

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

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

Όμως, οτιδήποτε εμπεριέχεται σε παρενθέσεις δεν είναι συνάρτηση — μπορεί να είναι στοιχεία σε λίστα — αλλά θα το δούμε αργότερα. Αυτή η σημειογραφία αναφέρεται ως προθεματική σημειογραφία, επειδή η συνάρτηση προτάσσει οτιδήποτε άλλο. Εάν είστε εξοικειωμένος με τη επιθεματική σημειογραφία ή έχετε μια αριθμομηχανή που χρησιμοποιεί αντίστροφη πολωνική σημειογραφία (όπως οι περισσότερες αριθμομηχανές HP), δεν θα έχετε κανένα πρόβλημα προσαρμογής σε τυποποιημένες εκφράσεις στο Scheme.

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

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

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

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

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

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

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

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

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

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

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

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

(+ 3 5)

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

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

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

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

(+ 3 5 6)

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

Μέχρι εδώ καλά - γράφουμε στο Scheme μια πρόταση και εκτελείται αμέσως στο παράθυρο κονσόλας Script-Fu. Τώρα προσοχή…

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

Εάν είσθε σαν κι εμένα, έχετε συνηθίσει να μπορείτε να χρησιμοποιείται επιπλέον παρενθέσεις όταν θέλετε — όπως όταν τυπώνετε μια σύνθετη μαθηματική εξίσωση και θέλετε να ξεχωρίσετε τα μέρη με παρενθέσεις για να φαίνεται καθαρότερα όταν διαβάζεται την εξίσωση. Στο Scheme, πρέπει να είσαστε προσεκτικός και να μην εισάγετε αυτές τις επιπλέον παρενθέσεις λανθασμένα. Π.χ., ας πούμε ότι θέλουμε να προσθέσουμε 3 στο αποτέλεσμα της πρόσθεσης 5 και 6 και μετά να προσθέσουμε 7:

3 + (5 + 6) + 7 = ;

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

(+ 3 (5 6) 7)

Όμως, αυτό είναι λάθος — θυμηθείτε, κάθε πρόταση στο Scheme αρχίζει και τελειώνει με παρενθέσεις, έτσι ο ερμηνευτής του Scheme θα σκεφτεί ότι προσπαθείτε να καλέσετε μια συνάρτηση που ονομάζετε «5» στην δεύτερη ομάδα των παρενθέσεων, παρά ότι προσθέτετε αυτούς τους αριθμούς πριν τους προσθέσετε στο 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 μέχρι να είστε ολότελα άνετος με αυτές τις αρχικές σκέψεις.