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