Neste treinamento, nós mostraremos a você os fundamentos da linguagem Scheme necessários para fazer uso do Script-Fu, e então vamos construir um script prático que você poderá agregar ao seu arsenal de scripts. O script vai pedir um texto ao usuário, então criará uma imagem do tamanho exato daquele texto. Então nós melhoraremos o script para deixar um pouco de espaço em volta desse texto, e concluiremos com algumas sugestões de formas para melhorar seu conhecimento em Script-fu.
![]() |
Nota |
---|---|
This section was adapted from a tutorial written for the GIMP 1 User Manual by Mike Terry. |
Scheme is a dialect of the Lisp family of programming languages. GIMP uses TinyScheme, which is a lightweight interpreter of a subset of the so-called R5RS standard.
A primeira coisa a aprender é
Todo comando em Scheme é colocado dentro de parênteses “( )”.
A segunda coisa que você precisa saber é:
O nome da função ou operador é sempre o primeiro item dentro dos parênteses, e o restante dos items são parâmetros para aquela função.
However, not everything enclosed in parentheses is a function — they can also be items in a list — but we'll get to that later. This notation is referred to as prefix notation, because the function prefixes everything else. If you're familiar with postfix notation, or own a calculator that uses Reverse Polish Notation (such as most HP calculators), you should have no problem adapting to formulating expressions in Scheme.
A terceira coisa a saber é:
Operadores matemáticos também são considerados funções, e portanto são colocados primeiro quando se estiver escrevendo expressões matemáticas.
Isso segue-se logicamente da notação em prefixo que acabamos de mencionar.
Aqui seguem alguns exemplos rápidos mostrando as diferenças entre as notações prefixadas, tradicional, e pós fixadas . Vamos adicionar os números 2 e 23:
Notação pré-fixada: + 2 23
(da forma que o Scheme pode entender)
Notação tradicional ("in-fixa"): 2 + 23
(a forma como nós normalmente escrevemos a operação, e que é usada em linguagens como C e Python)
Notação pós-fixada: 2 23 +
(a forma como muitas calculadoras da HP e linguagens como Forth e Postscript querem)
In GIMP, select
→ → → from the main menu. This will start up the Script-Fu Console window, which allows us to work interactively in Scheme.At the bottom of this window is a text entry field for commands. Here, we can test out simple Scheme commands interactively. Let's start out easy, and add some numbers:
(+ 3 5)
Ao digitar isso e apertar Enter, a resposta esperada, 8, aparece na parte central da janela.
The “+” function can take more arguments, so we can add more than one number:
(+ 3 5 6)
Isso também dá a resposta esperada: 14.
So far, so good — we type in a Scheme statement and it's executed immediately in the Script-Fu Console window. Now for a word of caution…
If you're like me, you're used to being able to use extra parentheses whenever you want to — like when you're typing a complex mathematical equation and you want to separate the parts by parentheses to make it clearer when you read it. In Scheme, you have to be careful and not insert these extra parentheses incorrectly. For example, say we wanted to add 3 to the result of adding 5 and 6 together:
3 + (5 + 6) + 7 = ?
Sabendo que o operador + pode adicionar uma lista de números, você pode ser tentado a converter essa expressão para:
(+ 3 (5 6) 7)
However, this is incorrect — remember, every statement in Scheme starts and ends with parens, so the Scheme interpreter will think that you're trying to call a function named “5” in the second group of parens, rather than summing those numbers before adding them to 3.
A forma correta de escrever a expressão acima seria:
(+ 3 (+ 5 6) 7)
Se você está familiarizado com outras linguagens de programação (C/C++, Perl ou Java você sabe que não precisa de espaço em branco em volta de operadores matemáticos para que eles formem uma expressão apropriada)
3+5, 3 +5, 3+ 5
Todas essas formas são aceitas nas linguagens com sintaxe derivada de C. Entretanto, o mesmo não é verdade para Scheme. Você precisa ter um espaço depois de um operador matemático (ou qualquer outro operador ou nome de função) em Scheme para que o mesmo seja corretamente interpretado pelo interpretador de Scheme.
Pratique um pouco com expressões matemáticas simples no terminal do Script-Fu, até que você esteja confortável com esses conceitos iniciais.