Hàm bản đồ tương đương với C # trong Haskell là gì


80

chức năng bản đồ trong Haskell có hai tham số đầu vào. Tham số đầu tiên là một hàm và tham số thứ hai là một danh sách. Hàm bản đồ áp dụng hàm được truyền làm tham số đầu vào cho tất cả các phần tử trong danh sách và trả về một danh sách mới.

Có C # tương đương với chức năng này không?


1
Bạn có thể muốn kiểm tra F #. Nó thu hẹp khoảng cách giữa C # và Haskell.
— ChaosPandion

3
Không hẳn vậy. Nó giống như "OCaml cho .NET".
— jrockway

2
Chưa kể rằng tất cả các ngôn ngữ thuộc họ ML (bao gồm cả F # và Haskell) được cho là có nhiều điểm chung với nhau hơn là với bất kỳ ngôn ngữ họ C nào; bất kỳ ai có thể xử lý F # cũng có thể xử lý Haskell hoặc OCaml.
— CA McCann

1
@jrockway, @camccann: Tôi không nói về cú pháp của ngôn ngữ. Ý tôi là thực tế là F # không buộc bạn phải luôn sử dụng một kiểu hàm thuần túy.
— ChaosPandion

Câu trả lời:


94

Select

Tham chiếu MSDN

Xem câu hỏi của tôi ở đây (Chỉ khi bạn tò mò vì nó không liên quan trực tiếp).


8
Cảm ơn ... Điều này hơi phản trực quan, tôi đã nghĩ rằng Chọn sẽ lọc các hàng từ một bộ sưu tập.
— BM.

8
Tôi thực sự hy vọng bạn kiểm tra câu hỏi của tôi.
— ChaosPandion

1
BM: Lọc đến từ đâu.
— Edward KMETT

21

Một thay thế khác cho Selectvà SelectManylà viết phương pháp mở rộng của riêng bạn.

public static IEnumerable<U> Map<T, U>(this IEnumerable<T> s, Func<T, U> f)
{
  foreach (var item in s)
    yield return f(item);
}

Cảm ơn Wes Dyer vì phương pháp mở rộng thú vị này! :) Xem bài đăng để biết thêm chi tiết.


15

Vì Selectvà SelectManyđã được đề cập, tôi sẽ trả lời một câu hỏi bổ sung mà bạn chưa hỏi: foldđược tìm thấy dưới dạng Tổng hợp .

Bây giờ tất cả mọi người đang đọc điều này nên được trang bị đầy đủ để trở thành Người viết Ngôn ngữ X bằng cách sử dụng các thành ngữ Ngôn ngữ Y ... vì vậy vì lợi ích của các lập trình viên C # đồng nghiệp của bạn, đừng quá lo lắng.


4
Bây giờ camccann, không có gì sai khi ném một cờ lê chức năng vào hộp công cụ của bạn mặc dù bạn đang đóng đinh. Bạn có thể phải thắt chặt một vài bu lông.
— ChaosPandion

4
@camccan Chức năng C # thực sự khá tốt. Chỉ vì ngôn ngữ không hoạt động đúng chức năng không có nghĩa là hầu hết các lập trình viên .net sẽ không được hưởng lợi nhiều từ việc xây dựng mọi thứ có nhiều chức năng hơn.

4
Sử dụng các tính năng lập trình chức năng mà C # cung cấp là một ý tưởng tuyệt vời. Mặt khác, việc buộc C # vào các thành ngữ chức năng mà nó không hỗ trợ tốt (ví dụ, ứng dụng từng phần được sử dụng phổ biến trong Haskell), có thể sẽ khiến bạn đau đầu, làm rối mã của bạn và làm phiền bất kỳ ai khác phải làm việc với nó.
— CA McCann


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.