Теперь, когда мы знаем, что каждый оператор Scheme заключается в скобки, и что название функции или оператора идёт первым, нужно научится, как создавать и использовать переменные и как создавать и использовать функции. Начнём с переменных.
Хотя есть разные методы декларации переменных, предпочтительный метод использует оператор let*. Если вы знакомы с другими языками программирования, этот оператор равносилен декларированию списка локальных переменных с пределом их применимости. На пример, чтобы декларировать две переменные a и b со значениями 1 и 2, нужно ввести:
(let*
(
(a 1)
(b 2)
)
(+ a b)
)
или на одной строке:
(let* ( (a 1) (b 2) ) (+ a b) )
|
Примечание |
|---|---|
|
Это всё надо поместить на одной строке при использовании окна консоли. В общем, однако, лучше придерживаться показанной схемы отступа; тогда сценарии легче читать. Мы ещё поговорим об этом в разделе и пробелах. |
Это декларирует две локальные переменные, a и b, даёт им начальные значения и печатает их сумму.
Вы могли заметить, что мы написали сложение (+ a b) внутри скобок оператора let*, а не после.
Это потому, что оператор let* также определяет предел, где можно использовать декларируемые переменные. Если ввести (+ a b) после оператора (let* …), вы получите сообщение об ошибке, потому что переменные видны только в пределах этого оператора let*. Поэтому они называются локальные переменные.
Общая форма оператора let* такова:
(let* ( переменные )
выражения )
где переменные декларируются внутри скобок, т.е. (a 2), а выражениями могут быть любые легальные команды Scheme. Помните, что эти переменные можно использовать только в пределах let*. Они — локальные переменные.
Мы уже указывали на тот факт, что отступы облегчают чтение и организацию сценариев. Этот принцип полезен и не влияет на Scheme — компилятор игнорирует лишние пробелы. Однако при работе с окном консоли, всё выражение нужно вводить на одной строке, т.е. всё, что находится между открывающей скобкой и закрывающей, должно быть введено на одной строке в поле вводе консоли.
Если у переменной уже есть значение и его нужно поменять, используйте оператор 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 — безтипный язык. Это помогает в быстрой разработке сценарией.
Во-вторых, не надо указываеть, что возвращается из функции — результат последнего оператора становится возвратным значением функции. Введите функцию в консоль и попробуйте следующее:
(AddXY (AddXY 5 6) 4)