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

3.2.1. Declarando variables

Although there are a couple of different methods for declaring variables, the preferred method is to use the let* construct. If you're familiar with other programming languages, this construct is equivalent to defining a list of local variables and a scope in which they're active. As an example, to declare two variables, a and b, initialized to 1 and 2, respectively, you'd write:

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

o, en una linea:

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

Tendrá que poner todo esto en una linea si está usando la ventana de la consola. En general, querrá adoptar una práctica similar para ayudar a hacer sus 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.

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.

This is because the let* statement defines an area in your script in which the declared variables are usable; if you type the (+ a b) statement after the (let* …) statement, you'll get an error, because the declared variables are only valid within the context of the let* statement; they are what programmers call local variables.

3.2.3. La sintaxis general de let*

la forma general de una declaración let*:

        (let* ( variables )
          expressions )
      

where variables are declared within parens, e.g., (a 2), and expressions are any valid Scheme expressions. Remember that the variables declared here are only valid within the let* statement — they're local variables.

3.2.4. Espacio blanco

Previously, we mentioned the fact that you'll probably want to use indentation to help clarify and organize your scripts. This is a good policy to adopt, and is not a problem in Scheme — white space is ignored by the Scheme interpreter, and can thus be liberally applied to help clarify and organize the code within a script. However, if you're working in Script-Fu's Console window, you'll have to enter an entire expression on one line; that is, everything between the opening and closing parens of an expression must come on one line in the Script-Fu Console window.

3.2.5. Asignando un nuevo valor a una variable

Once you've initialized a variable, you might need to change its value later on in the script. Use the set! statement to change the variable's value:

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

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

[Nota] Nota

The \ indicates that there is no line break. Ignore it (don't type it in your Script-Fu console and don't hit Enter), just continue with the next line.

3.2.6. Funciones

Ahora que entendemos las variables, trabajemos con algunas funciones. Declare 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 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 la comparas con otros lenguajes de programción.

  • First, notice that the parameters don't have any types (that is, we didn't declare them as strings, or integers, etc.). Scheme is a type-less language. This is handy and allows for quicker script writing.

  • Second, notice that we don't need to worry about how to return the result of our function — the last statement is the value returned when calling this function. Type the function into the console, then try something like:

    (AddXY (AddXY 5 6) 4)