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