Теперь, когда мы знаем, что каждый оператор Scheme заключается в скобки, и что название функции или оператора идёт первым, нужно научится, как создавать и использовать переменные и как создавать и использовать функции. Начнём с переменных.
Хотя есть разные методы декларации переменных, предпочтительный метод использует оператор let*. Если вы знакомы с другими языками программирования, этот оператор равносилен декларированию списка локальных переменных с пределом их применимости. На пример, чтобы декларировать две переменные a и b со значениями 1 и 2, нужно ввести:
        (let*
           (
              (a 1)
              (b 2)
           )
           (+ a b)
        )
      
        или на одной строке:
(let* ( (a 1) (b 2) ) (+ a b) )
| ![[Примечание]](images/note.png)  | Примечание | 
|---|---|
| Это всё надо поместить на одной строке при использовании окна консоли. В общем, однако, лучше придерживаться показанной схемы отступа; тогда сценарии легче читать. Мы ещё поговорим об этом в разделе и пробелах. | 
Это декларирует две локальные переменные, a и b, даёт им начальные значения и печатает их сумму.
Вы могли заметить, что мы написали сложение (+ a b) внутри скобок оператора let*, а не после.
        This is because the let*
        statement defines an area in your script in which the declared
        variables are usable; if you type the (+ a b)
        statement after the (let* …) statement,
        you'll get an error, because the declared
        variables are only valid within the context of the let*
        statement; they are what programmers call local variables.
      
Общая форма оператора let* такова:
        (let* ( переменные )
          выражения )
      
        
        where variables are declared within parens, e.g.,
        (a 2), and
        expressions are any valid Scheme expressions. Remember that the
        variables declared here are only valid within the
        let* statement — they're local variables.
      
Previously, we mentioned the fact that you'll probably want to use indentation to help clarify and organize your scripts. This is a good policy to adopt, and is not a problem in Scheme — white space is ignored by the Scheme interpreter, and can thus be liberally applied to help clarify and organize the code within a script. However, if you're working in Script-Fu's Console window, you'll have to enter an entire expression on one line; that is, everything between the opening and closing parens of an expression must come on one line in the Script-Fu Console window.
Если у переменной уже есть значение и его нужно поменять, используйте оператор set!:
(let* ( (theNum 10) ) (set! theNum (+ theNum theNum)) )
      
        Введите это выражение в окно консоли и посмотрите на результат. Сначала переменной theNum присваивается значение 10, и затем эта переменная складывается с самой же, и результат суммы выдаётся как результат всего выражения, т.е. 20.
Теперь, когда вы понимаете переменные, возмёмся за функции. Функции декларируются следующим образом:
        (define
           (
              название
              список-параметров
           )
           выражения
        )
      
        где функции даётся название, указываются названия параметров в списке-параметров, отделённые друг от друга пробелом, и потом следует список выражений, которые выполняются при вызове этой функции. На пример:
(define (AddXY inX inY) (+ inX inY) )
AddXY — название функции, а inX и inY — переменные. Эта функции берёт эти две переменные и складывает их.
Если вы программировали на императивных языках (как C/C++, Java, Pascal, и т.д.), то наверно заметили, что у декларации функции в Scheme что-то отсутствует.
Во-первых, у параметров нет «типов» (т.е. мы не декларировали как, например, строки или числа). Scheme — безтипный язык. Это помогает в быстрой разработке сценарией.
Second, notice that we don't need to worry about how to «return» the result of our function — the last statement is the value «returned» when calling this function. Type the function into the console, then try something like:
(AddXY (AddXY 5 6) 4)