3. Una guida sugli Script-Fu

In questo corso guidato verranno introdotti i concetti base del linguaggio Scheme, necessari per usare e creare dei comodi script Script-Fu da aggiungere ai propri. Lo script preso in esame richiede del testo all'utente, e crea una nuova immagine perfettamente dimensionata ad esso. Si migliorerà lo script in modo da creare dello spazio attorno al testo. In conclusione una serie di suggerimenti per aumentare le proprie conoscenze sugli Script-fu.

[Nota] Nota

This section was adapted from a tutorial written for the GIMP 1 User Manual by Mike Terry.

3.1. Introduzione a Scheme

3.1.1. Start with Scheme

Scheme is a dialect of the Lisp family of programming languages. GIMP uses TinyScheme, which is a lightweight interpreter of a subset of the so-called R5RS standard.

La prima regola da ricordare è che:

Ogni comando in Scheme è racchiuso tra parentesi tonde ().

La seconda nozione da sapere è che:

Il nome di una funzione/operatore è sempre il primo elemento all'interno delle parentesi mentre gli elementi successivi costituiscono i parametri della funzione.

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.

La terza cosa da comprendere è che:

Anche gli operatori matematici sono considerati funzioni e quindi, quando si scrivono espressioni matematiche, vengono per primi.

Questo deriva logicamente dalla notazione prefissa summenzionata.

3.1.2. Esempi di notazione prefissa, infissa e postfissa

Ecco alcuni esempi che illustrano la differenza tra le notazioni prefissa, infissa, e postfissa. Supponiamo di addizionare tra di loro 1 e 23:

  • Notazione prefissa: + 1 23 (la maniera richiesta da Scheme)

  • Notazione infissa: 1 + 23 (come siamo abituati a scrivere)

  • Notazione postfissa: 1 3 + (alla maniera di molte calcolatrici HP)

3.1.3. Fare pratica con Scheme

In GIMP, select FiltersDevelopmentScript-FuScript-Fu Console from the main menu. This will start up the Script-Fu Console window, which allows us to work interactively in Scheme.

3.1.4. La finestra del terminale Script-Fu

At the bottom of this window is a text entry field for commands. Here, we can test out simple Scheme commands interactively. Let's start out easy, and add some numbers:

(+ 3 5)

Dopo aver digitato quanto sopra e aver premuto Invio si otterrà la risposta attesa di 8 al centro della finestra.

Figura 13.1. Uso della console Script-fu.

Uso della console Script-fu.

The «+» function can take more arguments, so we can add more than one number:

(+ 3 5 6)

Si ottiene la risposta attesa di 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. Attenzione alle parentesi superflue

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 = ?

Sapendo che l'operatore + può prendere una lista di numeri da sommare si potrebbe essere tentati di trasformare quanto sopra in:

(+ 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.

Il modo corretto di scrivere l'istruzione di cui sopra è:

(+ 3 (+ 5 6) 7)

3.1.6. Prestare attenzione alla corretta spaziatura

Se si conoscono altri linguaggi di programmazione come C/C++, Perl o Java, si dovrebbe sapere che non sono necessari spazi tra gli operatori matematici per avere delle espressioni matematiche ben formate:

        3+5, 3 +5, 3+ 5
      

Queste sono tutte accettate dai compilatori C/C++, Perl e Java. Lo stesso non vale per Scheme. È obbligatorio avere uno spazio dopo un operatore matematico (o dopo ogni nome di funzione o operatore) per far sì che sia interpretato correttamente dall'interprete Scheme.

Si consiglia di fare pratica con semplici equazioni matematiche nella console di Script-Fu per acquisire dimestichezza con questi concetti iniziali.