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.
Entretanto, nem tudo que está entre parênteses é uma função — eles também podem conter itens de uma lista — mas vamos ver isso depois. Essa notação normalmente é chamada de notação em prefixo, por que a função prefixa todas as outras coisas. Se você estiver familiarizado com a notação pós-fixa, ou tiver uma calculadora que usa a Notação Polonesa Reversa (como a maioria das calculadoras da HP), você não deve ter nenhum problema em se adaptar para formular as expressões em 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.
Até aqui, tudo bem — nós digitamos um comando de Schema e ele é executado imediatamente no terminal do Script-fu. Agora, uma palavra de precaução...
Se você é como eu, você está acostumado a usar parênteses adicionais sempre que quiser, como quando você está escrevendo uma equação complexa, e você quer separar as partes com parênteses para torna-la mais clara quando for ler a mesma de volta. Em Scheme, você tem que tomar cuidado e não inserir essas parênteses extras de forma incorreta. Por exemplo, vamos dizer que queremos adicionar 3 ao resultado de adicionar 5 e 6 juntos:
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)
Entretanto, isso é incorreto — lembre-se, todo comando em Scheme começa e termina com parênteses, portanto, o interpretador de Scheme vai achar que estamos tentando chamar uma função de nome “5” no segundo grupo de parênteses, ao invés de somar esses dois números antes de adiciona-los ao três.
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.