我正在学习Haskell,这将是我的第一篇文章。
很棒的在线书籍http://learnyouahaskell.com/syntax-in-functions#where中有示例largestDivisble
。在哪里,引入了x
变量,但它是从哪里来的呢?直到现在,变量都在函数主体的模式匹配部分中界定。
正如我现在解释的那样:where p x
部分声明函数p
和某些变量x
的应用。在filter p [some-list]
正文中,“some-list”代表x
。
我认为这有点模糊。有人可以帮我解释一下这段代码吗?
largestDivisible :: (Integral a) => a
largestDivisible = head (filter p [100000,99999..])
where p x = x `mod` 3829 == 0
最佳答案
x
只是函数参数。它完全是p
的定义。
您可以将其定义为单独的顶级函数,如下所示:
p :: (Integral a) => a -> Bool
p x = x `mod` 3829 == 0
并请注意,此处不需要类型签名,将其包含在顶级函数中是一种很好的做法。
p
子句中的where
的定义是相同的,包括x
是函数参数的本地名称。两者之间的唯一区别是,在where
子句中定义的函数对于包含该子句的定义而言是本地的,并且不能在外部访问。关于haskell - 学习Haskell : where-clause variable x,它来自哪里?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57543931/