3. Инструкция по Script-Fu
| Глава 13. Создание сценариев |

## 3. Инструкция по Script-Fu

В этом руководстве вы опишем базовые понятия Scheme, необходимые для использования Script-Fu, и создадим небольшой сценарий, который можно будет добавить в список сценариев GIMP. Этот сценарий запрашивает у пользователя какой-нибудь текст и создаёт новое изображение, по размеру точно подходящее под текст. Затем мы улучшим сценарий и добавим рамку вокруг текста, после чего, наконец, мы дадим полезные советы по изучению Script-Fu.

| Примечание
This section was adapted from a tutorial written for the GIMP 1 User Manual by Mike Terry.

### 3.1. Первое знакомство с Scheme

#### 3.1.1. Начало работы с Scheme

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.

Третье, что нужно понимать:

> Математические операторы тоже считаются функциями, и поэтому тоже указываются в самом начале выражения.

Это логично следует из определения префиксной нотациий, упомянутой выше.

#### 3.1.2. Пример Префиксной, Инфиксной и Постфиксной Нотаций

Вот несколько примеров, показывающие разницу между префиксной, инфиксной и постфиксной нотациями. Мы сложим 1 и 23.

- Префиксная нотация: `+ 1 23` (так хочет Scheme)

- Инфиксная нотация: `1 + 23` (как пишется в повседневной жизни)

- Постфиксная нотация: `1 23 +` (как работают многие калькуляторы HP)

#### 3.1.3. Практика в Scheme

Теперь давайте попрактикуемся. Запустите GIMP, если от не работает, и выберите Фильтры → Script-Fu → Консоль. Эта команда откроет окно консоли Script-Fu, которое позволяет работать на Scheme в интерактивном режиме:

#### 3.1.4. Окно консоли Script-Fu

Внизу окна есть поле ввода, которое содержит активную команду. Здесь мы будем тестировать наши команды на Scheme. Сначала сложим два числа:

    (+ 3 5)

Введите эту строку в поле ввода и нажмите Enter. В центральном окне покажется результат 8.

Рисунок 13.1. Использование консоли Script-Fu

А что если нужно сложить больше чисел? Функция «+» берёт от двух и более параметров:

    (+ 3 5 6)

Это даст ожидаемый результат 14.

Пока всё хорошо — мы вводим оператор на Scheme, и он тут-же выполняется в консоли. Теперь несколько предостережений…

#### 3.1.5. Следите за дополнительными скобками

На пример, при введении сложного математического выражения, мы автоматически хотим отделит части выражения скобками для лучшего понимания. На Scheme нужно быть аккуратным и добавлять скобки правильно. Допустим, мы хотим добавить 3 к результату сложения 5-ти и 6-ти:

    3 + (5 + 6) + 7 = ?

Зная, что оператор + принимает список параметров, существует соблазн написать следующее:

    (+ 3 (5 6) 7)

Однако это неправильно. Нужно помнить, что каждый оператор начинается и заканчивается скобкой, поэтому Scheme попытается в выше приведённом примере найти функцию «5» во второй группе скобок, вместо сложения двух чисел в скобках.

Правильно утверждение выше пишется так:

    (+ 3 (+ 5 6) 7)

#### 3.1.6. Следите за пробелами

Если вы знакомы с другими программными языками, например C/C++, Perl или Java, то знаете, что пробелы не обязательны вокруг математических операторов для правильности выражения:

            3+5, 3 +5, 3+ 5

Все эти выражения принимаются компиляторами C/C++, Perl и Java. Однако в Scheme это не так. Пробел обязателен после названия функции или оператора для правильной интерпретации выражения компилятором Scheme.

Попрактикуйтесь с простыми математическими уравнениями в консоли Script-Fu пока не привыкните к этим базовым понятиям.

2.4. Виды Скрипт-Фу |  | 3.2. Переменные и функции

Report a bug in GIMP Report a documentation error