小编Meo*_*Law的帖子

为什么 `fx = xx` 和 `gx = xxxxx` 具有相同的类型

我正在玩 Rank-N-type 并尝试输入x x. 但我发现这两个函数可以用相同的方式输入,这是违反直觉的。

f :: (forall a b. a -> b) -> c
f x = x x

g :: (forall a b. a -> b) -> c
g x = x x x x x
Run Code Online (Sandbox Code Playgroud)

我还注意到类似f x = x x ... x x(许多x)的东西仍然具有相同的类型。谁能解释为什么会这样?

haskell

8
推荐指数
2
解决办法
212
查看次数

哈克尔的欧拉26

我正在尝试从Haskell的Project Euler 解决问题#26,但我遇到了一些问题.

我已经设法弄清楚倒数的重复周期只与其主要除数有关,所以我认为我只需要找出具有最长重复周期的素数的倒数.所以我在Haskell中编写了一个算法:

isPrime :: Int -> Bool
isPrime k
    | k <= 1    = error "Seriously?"
    | otherwise = null [ x | x <- [2..floor(sqrt(fromIntegral k))], k `mod` x == 0]

lp = [x | x <- [7..1000], isPrime x]

s = map (\n -> head [x | x <- [ceiling(logBase 10 (fromIntegral n))..], 10^x `mod` n == 1]) lp

main::IO()
main = print $ maximum s
Run Code Online (Sandbox Code Playgroud)

但是,它无法产生答案.我已经尝试使用lamda,它可以产生循环周期的数字,有几个素数,我设法得到正确的数字位数(我希望算法没有问题).我还检查了列表的输出s,它[6,2,6,16,18,45,23,15,3,5,63,没有结束.我不知道为什么会这样,因为如果我手动将函数应用于每个素数,我可以得到正确的输出.

任何人都可以告诉我我的代码有什么问题,或者我解决问题的方式结果是错的?谢谢.

haskell

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

标签 统计

haskell ×2