Agora que você sabe que todo comando de Scheme está entre parênteses, e que o nome da função ou operador vem listado primeiro, nós precisamos saber como criar e usar variáveis, e como criar e usar novas funções. Vamos começar pelas variáveis.
Embora haja alguns métodos diferentes de declarar variáveis, o método preferido é usando a construção let*. Se você estiver familiarizado com outras linguagens de programação, esta construção é equivalente a definir uma lista de variáveis locais no escopo em que as mesmas estão ativas. Como um exemplo de como você pode declarar duas variáveis, "a" e "b", inicializadas para 1 e 2 respectivamente, você pode escrever:
(let* ( (a 1) (b 2) ) (+ a b) )
ou, em uma linha só:
(let* ( (a 1) (b 2) ) (+ a b) )
Nota | |
---|---|
Você terá que por tudo isso na mesma linha se você está usando a janela de terminal. Em geral, no entanto, é melhor você adotar uma prática de identação (recuos), similar a que você usa em outras linguagens, para manter seus scripts mais legíveis. |
Isso declara duas variáveis locais, "a" e "b", as inicializa, e então imprime a soma das duas variáveis.
Você notará que nós escrevemos a soma (+ a b)
dentro dos parênteses do código da expressão let*
, e não depois de fecha-los.
Isso ocorre por que o comando let*
define uma área no seu script em que as variáveis declaradas são usáveis. Se você digitar a expressão (+ a b)
depois de digitar a expressão anterior, você verá um erro - por que as variáveis declaradas só eram válidas no contexto do comando let*
; Elas são o que os programadores chamam de variáveis locais.
A forma geral de um comando let*
é:
(let* (variáveis
)expressões
)
Onde as variáveis são definidas dentro de parênteses, por exemplo (a 2)
, e expressões são quaisquer expressões válidas em Scheme. Lembre-se de que as variáveis declaradas aqui só são válidas dentro do código do let*
: elas são variáveis locais.
Previamente, mencionamos o fato de que provavelmente você vai querer usar identação para ajudar a clarear e organizar seus scripts. Isso é uma boa poĺítica, e não é um problema em Scheme — espaços em branco a mais (incluindo caracteres de tabulação e nova linha) são ignorados pelo interpretador de Scheme, e então podem ser usados liberalmente para tornar o script mais legível. Entretanto, se você está trabalhando na janela interativa do Script-fu, você terá que colocar sempre uma expressão inteira em uma única linha — isso é, a abertura e o fechamento dos parenteses mais externos da expressão tem que estar na mesma linha.
Uma vez que você tenha inicializado uma variável, você pode precisar mudar seu valor mais tarde, dentro do script. Use o comando set!
para mudar o valor da variável:
(let* ( (theNum 10) ) (set! theNum (+ theNum theNum)) )
Tente adivinhar o que o comando acima vai fazer, e então, vá em frente e digite-o na janela do terminal do Script-Fu
Agora que você entendeu como funcionam as variáveis, vamos trabalhar com algumas funções. Você declara uma função com a seguinte sintaxe:
(define (nome
lista-de-parâmetros
)expressões
)
Onde nome
é o nome que você está dando a esta função, lista-de-parâmetros
é uma lista separada por espaços com os nomes dos parâmetros, e expressões
é uma série de expressões que a função executa quando é chamada. Por exemplo:
(define (Add X Y) (+ X Y) )
Add
é o nome da função e X
e Y
são as variáveis. Esta função toma dois parâmetros e os soma.
Se você já programou em linguagens de tipagem estática (como C/C++, java) você deve notar que algumas coisas estão ausentes nessa declaração de função em comparação com aquelas.
Primeiro, note que os parâmetros não tem “tipos” (isso é, nós não os declaramos como strings, inteiros, etc...). Scheme é uma linguagem sem tipos. Isso é prático e permite a criação de scripts de forma mais rápida.
Segundo, perceba que nós não precisamos nos preocupar em “retornar” o resultado de nossa função — a última expressão será o valor “retornado” quando essa função for chamada. Digite a função no terminal, e então tente algo como:
(Add (Add 5 6) 4)