Net*_*rar 0 primes haskell list
我有以下haskell代码:
a (b : bs) = b : [c | c <- (a bs), c `rem` b /= 0]
Run Code Online (Sandbox Code Playgroud)
有人可以解释这段代码的作用吗?运行as
a [3,5..42]
Run Code Online (Sandbox Code Playgroud)
回报
Prelude> a [3,5..42]
[3,5,7,11,13,17,19,23,29,31,37,41*** Exception: <interactive>:71:1-46: Non-exhaustive patterns in function a
Run Code Online (Sandbox Code Playgroud)
从我所看到的,该功能就像Eratosthenes的Sieve一样.该函数将b视为素数并过滤掉b的倍数.但我不确定如何.最重要的是,该函数抛出此异常.
你在这里有一个递归函数:你a bs在你的定义中调用.最终bs将是空列表,此时你会得到一个例外.例如,您可以在代码中添加以下行:
a [] = []
Run Code Online (Sandbox Code Playgroud)
然后输出将变为:
[3,5,7,11,13,17,19,23,29,31,37,41]
Run Code Online (Sandbox Code Playgroud)
至于这个函数的作用,它返回列表中的每个元素,它不是列表中任何前一个元素的倍数.如果你给它一个列表[2..x],其中x是任何整数,这与来自2to 的所有素数列表相同x.
获得素数列表的另一种方法是你找到的那个:你从3开始并使Haskell列表理解跳过任何2的倍数.
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |