【发布时间】:2016-06-04 01:24:51
【问题描述】:
我有一个无限的素数列表,由以下列表理解初始化:
primes = [x | x <- [2..], 0 `notElem` map (x `mod`) [2..(x `quot` 2)]]
这让我可以像17 `elem` primes 这样进行检查,以确认 17 是素数。但是,当我检查列表中是否有非素数时,程序不会停止计算。我假设这是因为它没有意识到如果在大于该数字的素数之前无法在列表中找到该数字,则无法在列表中的任何位置找到它。因此,Haskell 中是否有任何方式向编译器表明一个列表只包含升序数字,以便elem 检查在到达列表中大于其第一个参数的数字时知道停止并返回 false?
【问题讨论】:
标签: list haskell primes lazy-evaluation infinite