Функции
Функции — это основная концепция Scheme, предоставляющая средства для инкапсуляции логики, возможности повторного использования кода и эффективного структурирования ваших сценариев. С помощью функций вы можете создавать модульные, удобные в обслуживании сценарии, которые решают широкий спектр задач: от базовых операций до сложных рабочих процессов в Lumi.
Этот раздел служит введением в функции Scheme и закладывает основу для понимания их типов, определений и использования. В последующих разделах мы более подробно рассмотрим конкретные типы функций и их уникальные возможности.
Минимальный синтаксис и выражения
Код схемы состоит из выражений. Выражение принимает значение. Синтаксис единый: круглые скобки образуют вызов, в котором сначала указывается имя оператора или функции.
(+ 1 2) ; Adds 1 and 2, resulting in 3
(if #t 1 0) ; Evaluates to 1 because the condition is true
(list 1 2 3) ; Creates a list: (1 2 3)Поскольку все является выражением, поток управления естественным образом вписывается в тот же стиль, что и вызовы функций.
Почему функции важны
Функции играют ключевую роль в Scheme по нескольким причинам:
– Повторное использование кода. Избегайте повторения, инкапсулируя логику в повторно используемые компоненты.
- Модульность. Разбивайте сложные задачи на более мелкие и выполнимые части.
- Динамическое поведение: Принимайте параметры для обработки различных входных данных или адаптации к различным ситуациям. – Высшая абстракция. Упростите логику, сосредоточив внимание на том, «что» делает функция, а не на том, «как» она это делает.
Обзор типов функций
Scheme предлагает множество функциональных конструкций, каждая из которых подходит для конкретных случаев использования:
Именованные функции Это стандартные функции, определенные с помощью
define. Они составляют основу большинства сценариев.(define (square x) (* x x))Анонимные функции Также известные как лямбда-функции, это безымянные функции, определенные в строке для одноразового использования.
(lambda (x) (* x x))Функции высшего порядка Функции, которые принимают другие функции в качестве аргументов или возвращают функции в качестве результатов, обеспечивая мощные абстракции, такие как сопоставление, фильтрация и сокращение.
(map (lambda (x) (* x x)) '(1 2 3 4)) ; Returns (1 4 9 16)
Общий синтаксис функций
Функции в Scheme имеют простой и последовательный синтаксис:
(define (function-name parameter1 parameter2 ...)
body-expression)function-name: Имя функции.parameter1, parameter2, ...: Аргументы, которые принимает функция.body-expression: Логика, выполняемая при вызове функции.
Пример:
(define (add x y)
(+ x y))
(add 3 5) ; Returns 8Побочные эффекты и глобальное состояние
В Lumi многие полезные процедуры имеют побочные эффекты: они изменяют изображение, изменяют объект рисования, записывают файл или отображают выходные данные.
- Изолируйте побочные эффекты с помощью небольших, четко названных процедур.
- Избегайте изменения глобального контекста без необходимости.
- Когда вы меняете контекст (цвета, кисти и т. д.), оберните работу с помощью
lumi-context-pushиlumi-context-pop, чтобы восстановить состояние пользователя.