0
我有点困惑功能发现素数。我给出如下:SML:故障追踪筛功能
fun divides x y = (y mod x = 0);
fun sieve [] = []
| sieve(x::L) = x::sieve(filter (not o (divides x)) L);
在sieve
,我知道分x
是divides
部分应用程序。它只是返回一个函数,检查传递给它的任何东西是否可以被x
整除。
假设我打电话给sieve([2, 3, 4, ..., 10])
。
然后在第一个递归调用,我会得到
2::sieve(filter(not o (divides 2)) [3, 4, 5, ..., 10])
2::sieve([3, 5, 7, 9])
2::3::sieve(filter(not o (divides 3)) [5, 7, 9])
2::3::sieve([5, 7])
2::3::5::sieve(filter(not o (divides 5)) [7])
2::3::5::7
这是否正确?
感谢检查,
bclayman