这个问题现在对我来说是严格的学术问题,但有一天我可以看到它有实际应用.通过Haskell自我教育,我成功地建立了无限的素数列表.其中一部分就是这个功能:
isPrime n
| n < 2 = False
| head (primeFactorsOf n) == n = True
| otherwise = False
Run Code Online (Sandbox Code Playgroud)
其中primeFactorsOf按升序返回数字素数列表.1不是素数,所以素数n的主要因素是单身人士名单[n].因此,第二个防护罩可以替换为:
| primeFactorsOf n == [n] = True
Run Code Online (Sandbox Code Playgroud)
其中一个比另一个更有效吗?如果没有,是一个更好的风格?我的预感是,调用头并比较两个简单数字比调用cons和比较两个单例列表更快,所以我已经得到的将是最好的.但如果没有区别,我认为替代方案看起来更清洁了.