gpt4 book ai didi

function - 在 Haskell 中计算下一个素数

转载 作者:行者123 更新时间:2023-11-28 20:18:24 25 4
gpt4 key购买 nike

我正在尝试在使用 Haskell 输入数字后计算下一个最接近的素数,我编写了 2 个函数 isPrimenextPrime

这是我的代码:

isPrime :: Int -> Bool
isPrime x | x < 2 = False
| otherwise = prime (2:[3,4..(x-1)])
where
prime (y:z)
| x < y ^ 2 = True
| x `mod` y == 0 = False
| otherwise = prime z



nextPrime :: Int -> Int
nextPrime n | isPrime n == True = n
| otherwise = nextPrime n
where
n = n + 1

我遇到的问题是在运行时出现此错误:* Exception: "<<"loop">>"

不知道怎么回事,是不是死循环了?

最佳答案

在 Haskell 中你不能改变变量的值。这意味着你不能执行

n = n + 1

因为这会改变 n 的值。在 Haskell 中,n 是一个名称,总是 指代它所使用的函数内部的相同值。如果 n3 开头,则 n始终3。你可以这样做,

next = n + 1

然后也改

| otherwise = nextPrime n

进入

| otherwise = nextPrime next

这不会改变任何变量的值,而是创建一个具有新值的新变量——这是您在 Haskell 中经常做的事情!

关于function - 在 Haskell 中计算下一个素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19198744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com