gpt4 book ai didi

haskell - 在 Haskell 中返回空值而不限制多态性

转载 作者:行者123 更新时间:2023-12-04 00:01:06 24 4
gpt4 key购买 nike

我正在关注“Real World Haskell”,并且正在阅读第 2 章,其中的练习是创建一个“lastButOne”函数,该函数返回列表中倒数第二个值。我的原始代码是:

lastButOne xs =     if null (tail (tail xs))
then head xs
else lastButOne (tail xs)

除非我给它一个只有 1 或 2 个项目的列表,否则它工作得很好。所以我将其修改为:
lastButOne xs = if null xs || null (tail xs)
then head xs
else
if null (tail (tail xs))
then head xs
else lastButOne (tail xs)

它检查它是否只有 1 或 2 项,但如果由于调用 head 而只有 1 项,则会失败。我的问题是我想不出除了“head xs”之外的其他任何东西,理想情况下我希望它返回null或类似的东西,但我找不到允许函数仍然存在的“null”多态的。

最佳答案

也许您正在寻找 Maybe类型:

lastButOne :: [a] -> Maybe a
lastButOne [x,_] = Just x
lastButOne (_:y:ys) = lastButOne (y:ys)
lastButOne _ = Nothing

关于haskell - 在 Haskell 中返回空值而不限制多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8078316/

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