for-each
Funkcja for-each w Scheme służy do stosowania procedury do każdego elementu listy (lub wielu list). W przeciwieństwie do map, która zwraca nową listę z wynikami, for-each służy do efektów ubocznych, takich jak wypisywanie lub aktualizacja zmiennych.
Najprostsza postać for-each wygląda tak:
(for-each procedure list)- Procedura: Funkcja stosowana do każdego elementu listy.
- Lista: Lista, której elementy zostaną przetworzone.
Przykład: wypisanie listy
(define (print-item x)
(lumi-message (number->string x)))
(for-each print-item (list 1 2 3 4))- Tutaj funkcja
print-itemjest stosowana do każdego elementu listy(1 2 3 4). - Każda liczba jest wypisywana po kolei.
Wynik: 1 2 3 4
Jak to działa
Iteruje po każdym elemencie:
- Podana procedura jest wykonywana dla każdego elementu listy, w kolejności.
Wykonuje efekty uboczne:
- Typowe efekty uboczne to wypisywanie, logowanie lub modyfikacja zmiennych zewnętrznych. W przeciwieństwie do
map,for-eachnie zwraca nowej listy.
- Typowe efekty uboczne to wypisywanie, logowanie lub modyfikacja zmiennych zewnętrznych. W przeciwieństwie do
Przykład: z wieloma listami
Gdy podane są wiele list, for-each przetwarza odpowiadające sobie elementy z każdej listy.
(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))- Funkcja
sum-and-printsumuje odpowiadające sobie elementy z dwóch list i wypisuje wyniki.
Wynik: 5 7 9
Podsumowanie
- Funkcja
for-eachjest przydatna do wykonywania efektów ubocznych na każdym elemencie listy. - W przeciwieństwie do
map,for-eachnie tworzy nowej listy — koncentruje się wyłącznie na efektach ubocznych procedury. - Może obsługiwać wiele list jednocześnie, stosując procedurę do odpowiadających sobie elementów.
Dzięki for-each można skutecznie przetwarzać listy, gdy celem jest wykonywanie działań, a nie transformacja danych.