2013-10-04 44 views
8

Hãy nói rằng chúng tôi có chức năng này point-miễn phí:f1 = lật bản đồ const. Chức năng này hoạt động như thế nào?

f1 = flip const map 

Tôi không biết gì về cách chính xác nó làm việc và những gì nó có nghĩa vụ phải làm gì? I.e. Tôi biết các chức năng bản đồ, const và lật là gì. Nhưng đặt chúng lại với nhau như thế này không có ý nghĩa với tôi. Chính xác những gì đang xảy ra bên trong chức năng này? Có vẻ như tôi cũng phải trả lại điều tương tự như vậy ... Nhưng tại sao?

Trả lời

5

Hãy nhớ rằng tất cả các chức năng trong Haskell chỉ lấy một đối số nhưng mô phỏng lấy nhiều đối số bằng cách trả về một hàm khác. Vì vậy, flip const map cũng có thể được viết là (flip const) map. const thường bỏ qua đối số thứ hai của nó và trả về đối số đầu tiên của nó. flip đảo ngược thứ tự của các đối số, do đó, flip const bỏ qua đối số đầu tiên và trả về đối số thứ hai. Vì vậy, map bị bỏ qua và một hàm được trả về luôn trả về đối số của nó.

4

Nó thực sự không quan trọng nếu bạn đặt một cái gì đó khác hơn là map trong đó. Biểu thức flip const lật các đối số của const, vì vậy thay vì luôn trả về đối số đầu tiên, đối số đầu tiên sẽ trả về đối số thứ hai. Bạn có thể kiểm tra điều này bằng cách xác định lại f1 = flip const undefined. Điều này sẽ dẫn đến một ngoại lệ nếu undefined chưa từng được đánh giá, nhưng bạn có thể thấy rằng nó mang lại cùng một hành vi. Về cơ bản, flip const undefined = id.

14

Hãy xem những gì chức năng này thực hiện, từng chút một

flip const map x = (flip const) map x 
       = const x map 
       = x 

Đó là lý do tại sao nó luôn luôn trả những gì bạn cung cấp cho nó!

Các vấn đề liên quan