具有列表理解的停止ghci

0 haskell ghci

我是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停止工作,我该如何解决?谢谢.

Zet*_*eta 5

假设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)