3.2. Variables i funcions

Ara que sabem que totes les declaracions en Scheme estan entre parèntesis, i que el nom de la funció o operador va primer, hem d'aprendre a crear i utilitzar variables, i com crear i utilitzar funcions. Començarem amb les variables.

3.2.1. Declaració de variables

Encara que hi ha un parell de mètodes diferents per a declarar variables, el preferit és l'ús de l'estructura let*. Si esteu familiaritzats amb altres llenguatges de programació, aquesta construcció és equivalent a definir una llista de variables locals i una extensió en la qual estan actives. Com a exemple, per a declarar dues variables, a i b, inicialitzades respectivament a 1 i 2, escriviu:

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

o, en una línia:

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

Haureu de posar tot això en una línia si esteu utilitzant la finestra de la consola. Tanmateix, voldreu adoptar una pràctica similar de sagnat per a ajudar a fer els vostres scripts més llegibles. Parlarem una mica més d'això en la secció sobre l'espai blanc.

Això declara dues variables locals, a i b, inicialitzades, que mostren la suma de les dues variables.

3.2.2. Què és una variable local?

Notareu que escrivim la suma (+ a b) dins el parèntesi de l'expressió let*, i no després d'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 sintaxi general del let*

La forma general d'una declaració let* és:

        (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. Espai blanc

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. Assigna un valor nou a una variable

Una vegada que heu iniciat una variable, podríeu necessitar canviar aquest valor més endavant en l'script. Utilitzeu la declaració set! per a canviar el valor de la variable:

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

Intenteu endevinar què farà la declaració, llavors, introduïu-la en la consola de Script-Fu.

3.2.6. Funcions

Ara que entenem les variables, treballem amb algunes funcions. Declareu una funció amb la següent sintaxi:

        (define
           (
              name
              param-list
           )
           expressions
        )
      

on el nom és el nom assignat a aquesta funció, llista de paràmetres és una llista limitada de noms de paràmetres, i expressions és una sèrie d'expressions que la funció executa quan la crida. Per exemple:

(defineix (AddXY inX inY) (+ inX inY) )

AddXY és el nom de la funció, inX i inY són les variables. Aquesta funció agafa els dos paràmetres i els suma.

Si heu programat en un altre llenguatge (com C/C++, Java, Pascal, etc.), haureu notat un parell de coses que no hi són en la definició d'aquesta funció en comparació amb altres llenguatges de programació.

  • Primer, observeu que els paràmetres no tenen un «tipus» (és a dir, no es declaren com a cadenes, o enters, etc.). Scheme és un llenguatge sense tipus. Això és pràctic i permet una escriptura més ràpida dels scripts.

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