для каждого

Функция for-each в Scheme используется для применения процедуры к каждому элементу списка (или нескольких списков). В отличие от 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 суммирует соответствующие элементы из двух списков и печатает результаты.

Вывод: 5 7 9


Резюме

  • Функция for-each полезна для выполнения побочных эффектов для каждого элемента списка.
  • В отличие от map, for-each не создает новый список — он фокусируется исключительно на побочных эффектах процедуры.
  • Он может обрабатывать несколько списков одновременно, применяя процедуру к соответствующим элементам.

Используя for-each, вы можете эффективно обрабатывать списки, когда целью является выполнение действий, а не преобразование данных.