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.
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 | |
---|---|
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.
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.
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.
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.
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.
Nota | |
---|---|
La “ |
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)