機能

関数は 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 は、それぞれ特定のユースケースに適したさまざまな関数構造を提供します。

  1. 名前付き関数 これらは、define で定義された標準関数です。これらは、ほとんどのスクリプトのバックボーンを形成します。

    (define (square x)
      (* x x))
  2. 匿名関数 ラムダ関数 とも呼ばれるこれらは、1 回限りの使用のためにインラインで定義された名前のない関数です。

    (lambda (x) (* x x))
  3. 高階関数 他の関数を引数として受け取るか、関数を結果として返す関数。これにより、マッピング、フィルタリング、リダクションなどの強力な抽象化が可能になります。

    (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-pushlumi-context-pop で作業をラップし、ユーザーの状態が復元されるようにします。