3.2. Variables y funciones

Ahora que sabemos que todas las declaraciones en Scheme están entre paréntesis, y que el nombre de función/operador se listan primero, necesitamos saber como crear y usar variables, y como crear y usar funciones. Comenzaremos con las funciones.

3.2.1. Declarar variables

Aunque hay un par de métodos diferentes para declarar variables, el método preferido es usar la construcción let*. Si está familiarizado con otros lenguajes de programación, esta construcción es equivalente a definir una lista de variables locales y una extensión en la cual están activas. Como ejemplo, para declarar dos variables, a y b, inicializadas a 1 y 2, respectivamente, escriba:

        (let*
           (
              (a 1)
              (b 2)
           )
           (+ a b)
        )
      

o, en una línea:

(let* ( (a 1) (b 2) ) (+ a b) )
[Nota] Nota

Tendrá que poner todo esto en una línea si está usando la ventana de la consola. En general, sin embargo, querrá adoptar una práctica similar de sangrado para ayudar a hacer sus scripts más legibles. Hablaremos un poco más de esto en la sección sobre el espacio en blanco.

Esto declara dos variables locales, a y b, inicializados, que muestra la suma de las dos variables.

3.2.2. ¿Que es una variable local?

Notará que escribimos la suma (+ a b) bajo los paréntesis de la expresión let*, no después de ella.

Esto se debe a que la declaración let* define un área en su script en el que las variables declaradas que son utilizables; si teclea la declaración (+ a b) después la declaración (let* …), obtendrá un error, porque las variables declaradas son sólo válidas bajo el contexto de la declaración let*; son lo que los programadores llaman variables locales.

3.2.3. La sintaxis general de let*

La forma general de una declaración let* es:

        (let* ( variables )
          expresiones )
      

donde las variables se declaran entre paréntesis, por ejemplo, (a 2), y expresiones son cualquier expresión válida de Scheme. Recuerde que las variables declaradas aquí son solo válidas bajo la declaración let*, son variables locales.

3.2.4. Espacio en blanco

Previamente, mencionamos el hecho de que probablemente quiera usar el sangrado para ayudar a clarificar y organizar sus scripts. Esto es una buena política a adoptar, y no es un problema en Scheme— el espacio en blanco es ignorado por el intérprete Scheme, y se puede aplicar para ayudar a clarificar y organizar el código bajo un script. Si está trabajando en la ventana de la consola de Script-Fu, tendrá que introducir una expresión entera en una línea; todo, entre los paréntesis de inicio y fin de una expresión, debe venir en una línea en la ventana de la consola de Script-Fu.

3.2.5. Asignar un valor nuevo a una variable

Una vez que ha inicializado una variable, podría necesitar cambiar este valor más tarde en el script. Use la declaración set! para cambiar el valor de la variable:

        (let* ( (theNum 10) ) (set! theNum (+ theNum theNum)) )
      

Intente adivinar lo que hará la declaración de arriba, entonces, adelante e introdúzcalo en la ventana de la consola de Script-Fu.

3.2.6. Funciones

Ahora que entendemos las variables, trabajemos con algunas funciones. Declare una función con la siguiente sintaxis:

        (define
           (
              nombre
              lista de parámetros
           )
           expresiones
        )
      

donde nombre es el nombre asignado a esta función, lista de parámetros es una lista de espacio limitado de nombres de parámetros, y expresiones son una serie de expresiones que la función ejecuta cuando se la llama. Por ejemplo:

(define (AddXY inX inY) (+ inX inY) )

AddXY es el nombre de función y inX y inY son las variables. Esta función toma los dos parámetros y los suma juntos.

Si ha programado en otro lenguaje imperativo (como C/C++, Java, Pascal, etc.), podría notar que un par de cosas no están presentes en esta definición de función, cuando las compara con otros lenguajes de programación.

  • Primero, tenga en cuenta que los parámetros no tienen unos tipos (es decir, no se declaran como cadenas, o íntegros, etc.). Scheme es un lenguaje sin tipos. Esto es práctico y permite una escritura más rápida de escribir un script.

  • Segundo, tenga en cuenta que no necesitamos preocuparnos de como devolver los resultados de nuestra función, la última declaración es el valor devuelto cuando llama a esta función. Escriba la función en la consola, entonces intente algo como:

    (AddXY (AddXY 5 6) 4)