【发布时间】:2021-02-12 06:54:06
【问题描述】:
我是 Haskell 的新手,我正在尝试一项任务,其中结果应该是字符串中最后两个整数的总和。
我完全理解整个加法部分,但是我正在努力解决的是递归操作字符串。为了尝试这个任务,我首先“翻转”了字符串,最后一个整数成为第一个在第 n 项之后拆分的字符串,在本例中为 2。
例如,对于给定的字符串 1,2,3,4,5,6,7。结果将是 13,如 6+7=13。
sum' :: [a] -> [a]
sum' = foldl (\acc x -> x : acc) []
sum' :: [a] -> [a]
sum' [] = []
sum' xs = let h = splitAt 1 xs in h
sum' :: (Num a) => [a] -> a
sum' [] = 0
sum' (xs:x) = xs + sum' (x)
main :: IO()
main = do
print(sum'[1,2,3,4,5,6,7])
目前非常混乱且效率极低(更不用说损坏了)。非常感谢任何对 haskell 功能有帮助的帮助。
【问题讨论】:
-
如果列表只包含一两个项目怎么办?
-
这是一个很好的问题,这样的列表不适用于这个程序。但是,对于手头的任务,只需要字符串 1,2,3,4,5,6,7
-
"在第 n 个任期后拆分,在本例中为 2" ....
splitAt 1没有这样做。此外,您对同一个名称sum'有三个不同的定义。你不能在 Haskell 中这样做,必须为每个使用不同的名称。名字也应该有意义。您“定义要反转的函数”然后调用它...sum'?对于某些/许多人来说,正确使用可能非常困难,而且不会出错。好名字让我们更容易写出正确的代码。
标签: string haskell recursion sum integer