В этом руководстве вы опишем базовые понятия Scheme, необходимые для использования Script-Fu, и создадим небольшой сценарий, который можно будет добавить в список сценариев GIMP. Этот сценарий запрашивает у пользователя какой-нибудь текст и создаёт новое изображение, по размеру точно подходящее под текст. Затем мы улучшим сценарий и добавим рамку вокруг текста, после чего, наконец, мы дадим полезные советы по изучению Script-Fu.
Примечание | |
---|---|
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.
Первое, что нужно усвоить:
Каждый оператор в Scheme заключается в скобки ().
Второе, что нужно знать:
Название функции или оператора — первое слово в скобках, все последующие — параметры функции.
Однако не всё, что заключено в скобках — функция. Это могут быть элемента списка, но об этом позже. Такая нотация называется префиксной, потому что функция указывается в самом начале. Если вы знакомы с постфиксной нотацией, или у вас есть калькулятор с обратной польской нотацией (как многие калькуляторы HP), у вас не будет проблем в создании выражений в Scheme.
Третье, что нужно понимать:
Математические операторы тоже считаются функциями, и поэтому тоже указываются в самом начале выражения.
Это логично следует из определения префиксной нотациий, упомянутой выше.
Вот несколько примеров, показывающие разницу между префиксной, инфиксной и постфиксной нотациями. Мы сложим 1 и 23.
Префиксная нотация: + 1 23
(так хочет Scheme)
Инфиксная нотация: 1 + 23
(как пишется в повседневной жизни)
Постфиксная нотация: 1 23 +
(как работают многие калькуляторы HP)
Теперь давайте попрактикуемся. Запустите GIMP, если от не работает, и выберите
→ → . Эта команда откроет окно консоли Script-Fu, которое позволяет работать на Scheme в интерактивном режиме:Внизу окна есть поле ввода, которое содержит активную команду. Здесь мы будем тестировать наши команды на Scheme. Сначала сложим два числа:
(+ 3 5)
Введите эту строку в поле ввода и нажмите Enter. В центральном окне покажется результат 8.
А что если нужно сложить больше чисел? Функция «+» берёт от двух и более параметров:
(+ 3 5 6)
Это даст ожидаемый результат 14.
Пока всё хорошо — мы вводим оператор на Scheme, и он тут-же выполняется в консоли. Теперь несколько предостережений…
На пример, при введении сложного математического выражения, мы автоматически хотим отделит части выражения скобками для лучшего понимания. На Scheme нужно быть аккуратным и добавлять скобки правильно. Допустим, мы хотим добавить 3 к результату сложения 5-ти и 6-ти:
3 + (5 + 6) + 7 = ?
Зная, что оператор + принимает список параметров, существует соблазн написать следующее:
(+ 3 (5 6) 7)
Однако это неправильно. Нужно помнить, что каждый оператор начинается и заканчивается скобкой, поэтому Scheme попытается в выше приведённом примере найти функцию «5» во второй группе скобок, вместо сложения двух чисел в скобках.
Правильно утверждение выше пишется так:
(+ 3 (+ 5 6) 7)
Если вы знакомы с другими программными языками, например C/C++, Perl или Java, то знаете, что пробелы не обязательны вокруг математических операторов для правильности выражения:
3+5, 3 +5, 3+ 5
Все эти выражения принимаются компиляторами C/C++, Perl и Java. Однако в Scheme это не так. Пробел обязателен после названия функции или оператора для правильной интерпретации выражения компилятором Scheme.
Попрактикуйтесь с простыми математическими уравнениями в консоли Script-Fu пока не привыкните к этим базовым понятиям.