我在Haskell中有以下函数
agreeLen :: (Eq a) => [a] -> [a] -> Int
agreeLen x y = length $ takeWhile (\(a,b) -> a == b) (zip x y)
我正在尝试学习如何编写“惯用”的Haskell代码,这似乎更喜欢使用 .
和 $
而不是括号,并且尽可能使用pointfree的代码。但我似乎无法摆脱直接提到x
和y
的习惯。有什么好主意吗?
我认为对于任何两个参数的函数,我都会遇到同样的问题。
顺便说一句,这只是追求编写好代码,而不是什么“使用任何方法使其pointfree”的作业练习。
谢谢。
(附加评论)感谢答案。你们让我相信这个函数不需要pointfree。你们还给了我一些很好的例子来练习转换表达式。这仍然很困难,它们看起来与指针在C中一样重要。