それぞれに

Scheme の for-each 関数は、リスト (または複数のリスト) の各要素にプロシージャを適用するために使用されます。結果を含む新しいリストを返す map とは異なり、for-each は変数の出力や更新などの副作用に使用されます。

for-each の最も単純な形式は次のようになります。

(for-each procedure list)
  • 手順: リストの各要素に適用する関数。
  • リスト: 要素が処理されるリスト。

例: リストを印刷する

(define (print-item x)
  (lumi-message (number->string x)))

(for-each print-item (list 1 2 3 4))
  • ここでは、関数 print-item がリスト (1 2 3 4) の各要素に適用されます。
  • これにより、各番号が順番に出力されます。

出力: 1 2 3 4


仕組み

  1. 各要素を反復処理:

    • 提供されたプロシージャは、リスト内のすべての要素に対して順番に実行されます。
  2. 副作用を実行します:

    • 一般的な副作用には、外部変数の印刷、ログ記録、または変更が含まれます。 map とは異なり、for-each は新しいリストを返しません。

例: 複数のリストでの使用

複数のリストが指定された場合、for-each は各リストの対応する要素を処理します。

(define (sum-and-print x y)
  (lumi-message (number->string (+ x y))))

(for-each sum-and-print (list 1 2 3) (list 4 5 6))
  • 関数 sum-and-print は、2 つのリストの対応する要素を合計し、結果を出力します。

出力: 5 7 9


概要

  • for-each 関数は、リストの各要素に対して副作用を実行するのに役立ちます。
  • map とは異なり、for-each は新しいリストを生成しません。プロシージャの副作用のみに焦点を当てています。
  • 対応する要素にプロシージャを適用して、複数のリストを同時に処理できます。

for-each を使用すると、データの変換ではなくアクションの実行が目的の場合にリストを効果的に処理できます。