我是Haskell的新手.以下列表理解剂量不好用.ghci阻止它的输出.(在'7'之后,ghci停止了很长时间.)
Prelude Data.Numbers.Primes> [x | x <- primes, x <= 10]
Loading package array-0.4.0.1 ... linking ... done.
Loading package deepseq-1.3.0.1 ... linking ... done.
Loading package old-locale-1.0.0.5 ... linking ... done.
Loading package time-1.4.0.1 ... linking ... done.
Loading package random-1.0.1.1 ... linking ... done.
Loading package Numbers-0.2.1 ... linking ... done.
[2,3,5,7^Z
[2]+ Stopped ghci
Run Code Online (Sandbox Code Playgroud)
为什么ghci停止工作,我该如何解决?谢谢.
假设primes包含所有素数(因此它是无限列表),如果您尝试评估超过值7的列表,则列表推导不会终止.
[x | x <- primes, x <= 10]
Run Code Online (Sandbox Code Playgroud)
与...基本相同
filter (<= 10) primes
Run Code Online (Sandbox Code Playgroud)
你会过滤掉所有素数,无论它们是小于还是等于10.但是,你知道素数是有序的,所以你可以选择素数,只要它们小于10:
takeWhile (<= 10) primes
Run Code Online (Sandbox Code Playgroud)