3. Un tutorial de Script-Fu

En este curso de entrenamiento, le introduciremos en los fundamentos del Scheme, necesarios para usar Script-Fu, y entonces construir un script práctico que pueda añadir a su caja de herramientas de scripts. El script pide al usuario algún texto, entonces crea una imagen nueva del tamaño perfecto para el texto. Entonces, aumentaremos el script para permitir un búfer de espacio alrededor del texto. Concluiremos con unas pocas sugerencias de maneras de aumentar su conocimiento de Script-Fu.

[Nota] Nota

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

3.1. Conociendo el Scheme

3.1.1. Comencemos

Lo primero que aprenderemos es que:

Todas las declaraciones en scheme van entre paréntesis ().

La segunda cosa que debe saber es que:

El nombre de función/operadores, siempre, lo primero en los paréntesis, y el resto son parámetros de la función.

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 tercera cosa a entender es que:

Los operadores matemáticos son, tambien, considarados funciones, y, así, son listados primero cuando se escriben expresiones matemáticas.

Esto seguido, logicamente, de la notación prefix que mencionamos.

3.1.2. Ejemplos de notaciones Prefix, Infix, Y Postfix

Here are some quick examples illustrating the differences between prefix, infix, and postfix notations. We'll add a 1 and 23 together:

  • Prefix notation: + 1 23 (the way Scheme will want it)

  • Infix notation: 1 + 23 (the way we normally write it)

  • Postfix notation: 1 23 + (the way many HP calculators will want it)

3.1.3. Practicando scheme

Now, let's practice what we have just learned. Start up GIMP, if you have not already done so, and choose FiltersScript-FuConsole. This will start up the Script-Fu Console window, which allows us to work interactively in Scheme. In a matter of moments, the Script-Fu Console will appear:

3.1.4. La ventana de la consola de Script-Fu

At the bottom of this window is an entry-field ought to be entitled Current Command. Here, we can test out simple Scheme commands interactively. Let's start out easy, and add some numbers:

(+ 3 5)

Tecleando esto y presionando Enter, da la respuesta esperada, 8, en el centro de la ventana.

Figura 12.3. Use Script-Fu Console.

Use Script-Fu Console.

Ahora, ¿Si queremos sumar más de un número?, La función "+" puede tener dos o más argumentos, así que esto no es un problema:

(+ 3 5 6)

Esto da la respuesta esperada, 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. Tener cuidado con los paréntesis extras

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

Sabiendo que el operador + puede usar una lista de números para sumar, podría tentatarle convertir lo de arriba en lo siguiente:

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

La forma correcta de escribir esta declaración sería:

(+ 3 (+ 5 6) 7)

3.1.6. Asegúrese de tener el espacio apropiado, también

Si está familiarizado con otros lenguajes de programación, como C/C++, Perl o Java, sabe que no necesita espacios blancos alrededor de operadores matemáticos para formar, apropiadamente, una expresión:

        3+5, 3 +5, 3+ 5
      

Estos son aceptados por los compiladores de C/C++, Perl o Java. Esto mismo, no es cierto para Scheme. En Scheme, debe tener un espacio después de un operador matemático (u otra nombre de función u operador), para que sea correctamente interpretado por el intérprete de Scheme.

Practique un poco con operaciones matemáticas simples en la consola de Script-Fu hasta que esté cómodo con estos conceptos iniciales.