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.
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) )
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.
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 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.
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.
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.
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. |
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)