【问题标题】:Understanding Prime Test了解 Prime 测试
【发布时间】:2013-04-23 12:21:23
【问题描述】:

我有这个 Haskell 脚本:

prime :: Integer -> Bool    
prime 1 = False
prime n = [ x | x <- [2..n-1], n `mod` x == 0 ] == []

最后一行的第一个x 代表什么?为什么我可以用“String”替换它,整个功能仍然有效?

【问题讨论】:

    标签: haskell functional-programming primes


    【解决方案1】:

    列表推导中| 之前的部分是一个表达式,将用于生成结果列表的每个元素。

    在这种情况下,该函数只关心列表推导结果是否为空列表,因此列表的元素无关紧要。您可以将()x1 或实现Eq 的任何类型的任何值放在那里。如果您使用null 而不是== [] 来检查是否有空,它可能是任何东西,甚至是undefined

    【讨论】:

    • "如果您使用null 而不是== [] 来检查是否有空,它可能是任何东西,甚至是undefined。"无论如何,它可以是任何东西,甚至是undefined
    • @newacct:不,列表的Eq 实例需要元素的Eq 实例,即使我们从未真正调用它。所以它不可能是undefined :: a -&gt; a,例如。
    • @newacct:好吧,你说得对,null== [] 效果更好,因为== [] 不适用于不是Eq 的东西。但是,undefined 本身有效,因此您的部分答案没有意义。
    • @newacct:这是一个模棱两可的类型错误,除非有 GHCi 的 ExtendedDefaultRules
    猜你喜欢
    • 2012-06-16
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 2021-09-15
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多