小编J. *_*Kim的帖子

为什么此代码返回空列表或失败?哈斯克尔

primes :: [Int]
primes = sieve [2..]

sieve :: [Int] -> [Int]
sieve (p:xs)= p:sieve[x|x<-xs,x `mod` p /= 0]

f :: Int->Int
f n = head [x|x<-[0,(product (filter (<n) primes))..],x/=0,sum (map (x `mod`) [1..n]) == 0]
Run Code Online (Sandbox Code Playgroud)

加载到GHCi并输入"f 20"失败......请帮助我

haskell

1
推荐指数
1
解决办法
145
查看次数

Haskell,无限列表上的折叠器

我在读LYAH时遇到了一个问题.

这是我对无限列表中的foldr的想法:

foldr (:) [] [1..] = 1:2:...:**?:[]**
Run Code Online (Sandbox Code Playgroud)

我认为GHCi在评估之前不知道它是列表:[].

但GHCi确实知道.

所以我认为它可以识别foldr(:) [] [无限列表] = [无限列表本身].

Prelude> [1..10] == (take 10 $ foldr (:) [] [1..])
True
Prelude> [1..] == (foldr (:) [] [1..])
Interrupted.
Run Code Online (Sandbox Code Playgroud)

然而事实并非如此.

我想知道在评估∞:[]之前GHCi识别它是[1 ..]时实际发生了什么.

只需在评估之前输入推理?

haskell type-inference fold

1
推荐指数
1
解决办法
307
查看次数

标签 统计

haskell ×2

fold ×1

type-inference ×1