14.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/operadores es listado primero, necesitamos saber como crear y usar variables, y como crear y usar funciones. Comenzaremos con las funciones.

Declarando Variables

Aunque hay un par de métodos diferentes para declarar variables, el método preferido es usar la construcción let*. Si estás 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, escribes:

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

o, en una linea:

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

Tendrás que poner todo esto en una linea si estás usando la ventana de la consola. En general, querrás adoptar una práctica similar para ayudar a hacer tus scripts más legibles. Hablaremos un poco más de esto en la sección Espacio Blanco.

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

Que Es Una Variable Local?

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

Esto es porque la declaración let* define un area en tu script en el que se declaran las variables que serán utilizables; si tecleas (+ a b) y después (let* ...), obtendrás un error, porque las variables declaradas son, solo, válidas bajo el contexto de la declaración  let* ; son lo que los programadores llaman variables locales.

La Sintaxis General De let*

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

        (let* ( variables ) expressions )
      

donde las variables son declaradas bajo paréntesis, p. e. (a2), y expresiones son cualquier expresión válida de Scheme. Recuerda que las variables declaradas aquí son solo válidas bajo la declaración  let*  -- son variables locales.

Espacio Blanco

Previamente, mencionamos el hecho de que, provablemente, quieres usar indetation para ayudar a clarificar y organizar tus scripts. Esto es una buena politica a adoptar, y no es un problema en Scheme -- espacio en blanco es ignorado por el interprete Scheme, y se puede aplicar para ayudar a clarificar y organizar el código bajo un script. , si estás trabajando en la ventana de la Consola Script-Fu, tendrás que entrar una expresión entera en una linea; todo, entre los paréntesis de inicio y fin de una expresión, debe venir en una linea en la ventana de la Consola Script-Fu.

Asignando Un Nuevo Valor A Una Variable

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

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

Intenta adivinar lo que la declaración de arriba hará, entonces, adelante e introdúcelo en la ventana de la Consola Script-Fu.

[Note] Nota

La "\" indica que allí no hay una linea rota. Ignoralo (no lo escribas en tu Consola Script-Fu y no pulses Enter), justo continua con la siguiente linea.

Funciones

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

        (define (name param-list) expressions)
      

donde name es el nombre asignado a esta función,  param-list es una lista espacio-delimitada de nombres de parámetros, y expressions son una serie de expresiones que las funciones ejecutan cuando se las 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 has programado en otro lenguaje imperativo (como C/C++, Java, Pascal, etc.), podrías notar que un par de cosas son ausentes en esta definición de función cuando la comparas con otros lenguajes de programción.

  • Primero, notas que los parámetros no tienen un "tipo" (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 script.

  • Segundo, notas que no necesitamos  preocuparnos de como devolver los resultados de nuestra función -- la última declaración es el valor devuelto cuando llamas a esta función. Escribe la función en la consola, entonces intenta algo como:

                (AddXY (AddXY 5 6) 4)