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

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

| Примечание
Этот раздел был адаптирован из инструкции, написанной для руководство пользователя GIMP 1 Майком Терри (Mike Terry).

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

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

Scheme — это диалект семейства языков программирования Lisp. GIMP использует TinyScheme, который представляет собой облегчённый интерпретатор подмножества так называемого стандарта R5RS.

Первое, что нужно усвоить:

> Каждый оператор в Scheme заключается в скобки ().

Второе, что нужно знать:

> Название функции или оператора — первое слово в скобках, все последующие — параметры функции.

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.

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

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

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

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

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

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

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

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

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

В GIMP выберите пункт главного меню Фильтры → Разработка → Script-Fu → Консоль Script-Fu. Запустится окно консоли Script-Fu, позволяющее интерактивно работать в Scheme.

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

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

    (+ 3 5)

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

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

Функция «+» может принимать несколько аргументов, поэтому можно добавить более одного числа:

    (+ 3 5 6)

Это даст ожидаемый результат 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…

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

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 = ?

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

    (+ 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.

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

    (+ 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. Виды Script-Fu |  | 3.2. Переменные и функции

Report a bug in GIMP Сообщите об ошибке в нашем баг-трекере