Mittwoch, 2. März 2011

Gimp Script-FU / Scheme Programmierung

Scheme ist ein Lisp Dialekt. Neben Atomaren Ausdrücken wie z.B. 7, "asa" oder 'a gibt es Listen. Dabei sind literale Listen in der Schreibweise '(4 abtfd "asas" -15) zu notieren. Innerhalb einer Liste entfällt dieser Zwang mit Präfix '. Funktionsaufrufe sind ebenfalls in der Gestalt einer Liste zu notieren. Dabei wird die Präfixnotation angewendet: (+ 1 2 3 4) == 1+2+3+4. Man kann nun auch Funktionen definieren: (define (fn_name par1 par2 par3) (- (+ par1 par2) par3) ). Mit (let* ( (a 5) (b "skdjsd") ) (list a b) ) definiert man lokale Variablen, welche in der inneren Klammer in Ausdrücken verwendet werden können. Es gibt die Listenfunktionen (car '( 1 2 3) ) == 1 und (cdr '(1 2 3) ) == (2 3). Diese können auch wiederholt angewendet abgekürzt werden: (car (cdr (1 2 3) ) ) == (cadr (1 2 3) ) == 2. Diese abkürzende Schreibweise geht aber nicht beliebig: Z.B. kann man nicht
(let* ((x '( (1 2 (3 4 5) 6) 7 8 (9 10) ) )) (caar (cddar x)) ) == 3 mit (let* ((x '( (1 2 (3 4 5) 6) 7 8 (9 10) ) )) (caaddar x) ) abkürzen.

Eine Funktion registriert man in gimp über (script-fu-register "fn_name"
"mandatoryField_1"
"mandatoryField_2"
"mandatoryField_3"
"mandatoryField_4"
"mandatoryField_5"
"mandatoryField_6"
SF-IMAGE "Image" 0; Von Gimp mit aktuellem Bild besetzt
SF-DRAWABLE "Drawable" 0; Von Gimp mit Canvas besetzt
SF-STRING "TextFieldLabel" "initValue"; Eingabefeld in GUI
SF-TOGGLE "CheckboxLabel" TRUE; Checkbox in GUI
)
Dabei werden die "SF-" Eingabefelder in der Reihenfolge ihrer Aufzählung den formalen Paramtern der funktion fn_name zugeordnet:
(define (fn_name par1 par2 par3 par4? ) (beliebiger_code1) (beliebiger_code2) ). Man beachte, dass bei par4? das ? Bestandteil des Namens ist. Also entspricht par1 dem Typ SF-IMAGE usw.

http://docs.gimp.org/de/gimp-using-script-fu-tutorial.html
http://www.scheme.com/tspl2d/index.html
Vergleich Scheme und Lisp

Keine Kommentare:

Kommentar veröffentlichen