功能
函數是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包裝工作,以便恢復使用者的狀態。