I denna träningskurs introducerar vi grunderna i Scheme som är nödvändiga för att använda Script-Fu, och bygger sedan ett praktiskt skript som du kan lägga till i din verktygslåda med skript. Skriptet efterfrågar text från användaren, och skapar sedan en ny bild vars storlek perfekt passar texten. Vi kommer sedan förbättra skriptet så det tillåter ett buffertutrymme runt texten. Vi kommer avsluta med några förslag om hur du kan förbättra din kunskap om Script-Fu.
![]() |
Notera |
---|---|
Detta avsnitt anpassades från en handledning som skrevs till användarhandboken för GIMP 1 av Mike Terry. |
Scheme är en dialekt av Lisp-familjen av programspråk. GIMP använder TinyScheme som är en lättviktstolk för en delmängd av den så kallade R5RS-standarden.
Den första saken du behöver lära dig är att:
Varje sats i Scheme omgivs av parenteser ().
Den andra saken du behöver veta är att:
Funktionsnamnet/operatorn är alltid det första objektet i parenteserna, och resten av objekten är parametrar till funktionen.
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.
Den tredje saken att förstå är att:
Matematiska operatorer också anses vara funktioner, och listas därmed först då matematiska uttryck skrivs.
Detta följer logiskt från prefixnotationen som vi just nämnde.
Här är några snabba exempel som illustrerar skillnaderna mellan prefix-, infix- och postfix-notation. Vi adderar 1 och 23:
Prefixnotation: + 1 23
(sättet som Scheme vill ha det)
Infixnotation: 1 + 23
(sättet som vi ”vanligen” skriver det)
Postfixnotation: 1 23 +
(sättet som många HP-miniräknare vill ha det)
I GIMP, välj
→ → → från huvudmenyn. Detta kommer starta upp Script-Fu-konsolfönstret, vilket låter oss arbeta interaktivt i Scheme.Längst ner i detta fönster är ett textinmatningsfält för kommandon. Här kan vi testa enkla Scheme-kommandon interaktivt. Låt oss börja enkelt och addera några tal:
(+ 3 5)
Att skriva in detta och trycka Retur ger det förväntade svaret 8 i mittfönstret.
Funktionen ”+” kan ta fler argument, så vi kan addera mer än ett tal:
(+ 3 5 6)
Detta ger också det förväntade svaret 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 = ?
Då du vet att +-operatorn kan ta en lista med tal att addera, så kanske du är frestad att konvertera det ovanstående till följande:
(+ 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.
Det korrekta sättet att skriva satsen ovan skulle vara:
(+ 3 (+ 5 6) 7)
Om du är bekant med andra programspråk som C/C++, Perl eller Java, så vet du att du inte behöver blanktecken runt matematiska operatorer för att korrekt forma ett uttryck:
3+5, 3 +5, 3+ 5
Dessa accepteras alla av C/C++-, Perl- and Java-kompilatorer. Detsamma är dock inte sant för Scheme. Du måste ha ett blanksteg efter en matematisk operator (samt alla andra funktionsnamn och operatorer) i Scheme för att den ska tolkas riktigt av Scheme-tolken.
Öva lite med enkla matematiska ekvationer i Script-Fu-konsolen tills du är helt bekväm med dessa inledande koncept.