功能
函数是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 函数,这些是内联定义的未命名函数,供一次性使用。
(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包装工作,以便恢复用户的状态。