我正在学习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/

10-16 23:05