cho mỗi
Hàm for-each trong Scheme được sử dụng để áp dụng một quy trình cho từng thành phần của danh sách (hoặc nhiều danh sách). Không giống như map, trả về một danh sách mới kèm theo kết quả, for-each được sử dụng cho tác dụng phụ của nó, chẳng hạn như in hoặc cập nhật các biến.
Dạng đơn giản nhất của for-each trông như thế này:
(for-each procedure list)- Thủ tục: Hàm áp dụng cho từng thành phần của danh sách.
- Danh sách: Danh sách có các phần tử sẽ được xử lý.
Ví dụ: In danh sách
(define (print-item x)
(lumi-message (number->string x)))
(for-each print-item (list 1 2 3 4))- Ở đây, hàm
print-itemđược áp dụng cho từng phần tử của danh sách(1 2 3 4). - Điều này làm cho mỗi số được in tuần tự.
Đầu ra: 1 2 3 4
Cách thức hoạt động
Lặp lại từng phần tử:
- Quy trình đã cung cấp được thực hiện cho mọi phần tử trong danh sách theo thứ tự.
Thực hiện tác dụng phụ:
- Các tác dụng phụ thường gặp bao gồm in, ghi nhật ký hoặc sửa đổi các biến bên ngoài. Không giống như
map,for-eachkhông trả về danh sách mới.
- Các tác dụng phụ thường gặp bao gồm in, ghi nhật ký hoặc sửa đổi các biến bên ngoài. Không giống như
Ví dụ: Sử dụng với nhiều danh sách
Nếu nhiều danh sách được cung cấp, for-each sẽ xử lý các phần tử tương ứng từ mỗi danh sách.
(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))- Hàm
sum-and-printtính tổng các phần tử tương ứng từ 2 danh sách và in kết quả.
Đầu ra: 5 7 9
Tóm tắt
- Hàm
for-eachrất hữu ích để thực hiện các tác dụng phụ đối với từng thành phần của danh sách. - Không giống như
map,for-eachkhông tạo danh sách mới—nó chỉ tập trung vào các tác dụng phụ của quy trình. - Có thể xử lý đồng thời nhiều danh sách, áp dụng thủ tục cho các phần tử tương ứng.
Bằng cách sử dụng for-each, bạn có thể xử lý danh sách một cách hiệu quả khi mục tiêu là thực hiện hành động thay vì chuyển đổi dữ liệu.