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

如何修改Standard ML的foldr函数,使其类型为('a * 'b -> 'b) -> 'a list -> 'b -> 'b?

修改Standard ML中foldr函数的类型签名

你作为Standard ML初学者,已知原foldr实现及类型签名如下:

fun foldr f [] a = a 
  | foldr f (x::xs) a = f x (foldr f xs a)

(* 原类型签名:('a -> 'b -> 'b) -> 'a list -> 'b -> 'b *)

要将其类型签名改为('a * 'b -> 'b) -> 'a list -> 'b -> 'b,核心是把原函数中接受柯里化参数的f,改为接受元组参数的f,仅需修改递归调用时传递给f的参数形式:

fun foldr f [] a = a 
  | foldr f (x::xs) a = f (x, foldr f xs a)

改动说明:

  • 原代码中f x (foldr f xs a)是将x和递归结果作为两个独立参数传给柯里化的f;
  • 修改后f (x, foldr f xs a)是把x和递归结果打包成一个元组(x, foldr f xs a),作为单个参数传给接受元组的f,这就匹配了目标类型签名里('a * 'b -> 'b)的函数参数要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:40:27