tôi có chức năng sau đây trong HaskellLàm thế nào để viết lại một hàm Haskell của hai luận điểm miễn phí theo phong cách
agreeLen :: (Eq a) => [a] -> [a] -> Int
agreeLen x y = length $ takeWhile (\(a,b) -> a == b) (zip x y)
Tôi đang cố gắng tìm hiểu làm thế nào để viết 'thành ngữ' Haskell, mà dường như thích sử dụng .
và $
thay vì dấu ngoặc đơn, đồng thời cũng thích mã pointfree nếu có thể. Tôi dường như không thể loại bỏ việc đề cập đến số x
và y
một cách rõ ràng. Bất kỳ ý tưởng?
Tôi nghĩ rằng tôi muốn có cùng một vấn đề với việc chấm dứt bất kỳ chức năng nào của hai đối số.
BTW, đây chỉ là việc theo đuổi viết mã tốt; không một số "sử dụng bất cứ điều gì nó cần để làm cho nó pointfree" bài tập về nhà bài tập.
Cảm ơn.
(Đã thêm nhận xét) Cảm ơn câu trả lời. Bạn đã thuyết phục tôi chức năng này không được hưởng lợi từ pointfree. Và bạn cũng đã cho tôi một số ví dụ tuyệt vời để thực hành các biểu thức chuyển đổi. Nó vẫn còn khó khăn đối với tôi, và họ dường như là điều cần thiết để Haskell như con trỏ là để C.
Tôi đã tìm thấy hlint (http://community.haskell.org/~ndm/darcs/hlint/hlint.htm) rất có giá trị trong việc giúp tôi tìm hiểu các cách khác để viết các biểu thức, kể cả sử dụng. và $. – mhwombat