You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell作业:如何定义lastHelper实现返回列表末元素的myLast函数

解决方法

首先明确lastHelper的类型:因为foldr的类型是(a -> b -> b) -> b -> [a] -> b,这里myLast的返回值类型是Maybe a,初始累积值是Nothing(类型Maybe a),所以lastHelper的类型应为:

lastHelper :: a -> Maybe a -> Maybe a

接下来是lastHelper的几种等价实现:

写法一:模式匹配

lastHelper x Nothing = Just x
lastHelper x (Just y) = Just y

写法二:case表达式

lastHelper x acc = case acc of
    Nothing -> Just x
    Just _ -> acc

写法三:用maybe函数简化

lastHelper x = maybe (Just x) id

写法四:用<|>操作符(需导入Control.Applicative)

import Control.Applicative

lastHelper x acc = acc <|> Just x

工作原理

foldr从列表右端开始遍历:

  • 空列表时,foldr直接返回初始值Nothing,符合要求。
  • 非空列表时,最右侧元素先被处理,此时累积值是初始的Nothing,lastHelper返回Just x(x为最后一个元素)。
  • 左侧元素处理时,累积值已经是Just包裹的最后一个元素,lastHelper直接返回该累积值,不会替换正确结果。

内容的提问来源于stack exchange,提问作者coderodde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 21:32:16