gpt4 book ai didi

haskell - Haskell 中的欧拉问题——有人能发现我的错误吗

转载 作者:行者123 更新时间:2023-12-02 06:32:18 26 4
gpt4 key购买 nike

我正在尝试 Euler Problem 4在 haskell 。它要求通过两个三位数相乘形成最大的回文数。问题很简单,我认为我的 Haskell-fu 能够胜任这项任务,但我得到的结果至少可以说看起来不一致。

这是我的回文检测器(代码本身很简单):

isPalindrome :: String -> Bool
isPalindrome [] = True
isPalindrome str = let str2 = reverse str
in (str2 == str)

从这里开始,这是一个简单的问题,编写一个函数来检测乘积何时形成回文(并且可能从被乘数之一中减一,如果没有,则通过强力搜索进行递归)。这是我的非常简化的版本,精简并返回 IO 操作以进行调试:

findPal :: Integer -> Integer -> IO()
findPal 1 y = putStrLn "reached 1"
findPal x y = let pal = isPalindrome $ show mult
mult = x * y
in case pal of
true -> putStrLn $ "mult is " ++ (show mult)
false -> putStrLn "pal is false"

以下是 GHCi 中的两个单独的输出:

*Main> isPalindrome $ show (999*999)
False
*Main> findPal 999 999
mult is 998001

换句话说,对 isPalindrome 的调用在 findPal 的 case 语句中始终评估为 true,即使它应该为 false。

我在这里没有看到什么?

最佳答案

我认为你需要将“True”和“False”大写。我没有方便的 Haskell 解释器,但您可能只是声明一个新变量“true”等于“pal”

关于haskell - Haskell 中的欧拉问题——有人能发现我的错误吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1758672/

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