Toán tử mà bạn mô tả về cơ bản là hàm map
cho một bộ hai phần tử. Các map
chức năng, nói chung có một chữ ký (đối với một số F<'a>
mà có thể là seq<'a>
hoặc nhiều loại khác trong F # thư viện):
map : ('a -> 'b) -> F<'a> -> F<'b>
Vì vậy, nếu bạn xác định F<'a>
như một tuple hai yếu tố, sau đó chức năng của bạn thực sự là chỉ map
(nếu bạn lật các đối số):
type F<'a> = 'a * 'a
let map f (a, b) = (f a, f b)
các hoạt động không tích hợp bất cứ nơi nào trong # thư viện F, nhưng nó rất hữu ích để nhận ra rằng nó thực sự phù hợp với một mô hình đó là khá phổ biến trong F # thư viện khác (danh sách, seq, mảng, v.v.)
Nhìn vào câu trả lời Haskell tham chiếu bởi @pad - về nguyên tắc, Haskell làm cho nó có thể để xác định các chức năng tương tự cho tất cả các loại có hỗ trợ các hoạt động đó sử dụng các lớp học kiểu (do đó bạn sẽ viết chỉ fmap
thay vì Seq.map
hoặc thay trong số TwoElementTuple.map
của bạn, nhưng nó thực sự không hoạt động vì nhiều lý do kỹ thuật - vì vậy người bán hàng cần phải gọi nó theo cách khác). Trong F #, điều này không thể dễ dàng để xác định một hàm map
cho các loại khác nhau, nhưng bạn vẫn có thể nghĩ chức năng của mình là map
cho các bộ hai phần tử (ngay cả khi bạn thấy dễ dàng hơn tên nhà điều hành, thay vì tên map
.)
Nguồn
2013-02-07 10:41:48
Quan sát tốt, tôi sẽ xem xét đổi tên nó thành 'bản đồ' ... nhưng tôi phải thừa nhận tôi thích ngữ nghĩa đường ống .. – Benjol
Tôi nghĩ sử dụng tên tượng trưng ở đây có lẽ đẹp hơn - nó thực sự phụ thuộc vào cách sử dụng cụ thể của bạn. (Nhưng tôi không phải là một fan hâm mộ lớn của các tên biểu tượng, nói chung, bởi vì tôi thấy họ khó giải mã hơn.) –