gpt4 book ai didi

functional-programming - Foldl 在 SML 中返回一个元组?

转载 作者:行者123 更新时间:2023-12-04 08:42:32 25 4
gpt4 key购买 nike

我正在处理的问题需要输入一个整数列表并返回这些数字的平均值。它需要符合如下所示的特定格式...

fun average (n::ns) =
let
val (a,b) = fold? (?) ? ?
in
real(a) / real(b)
end;

我只能替换问号,不能使用任何内置函数。我有一个可行的解决方案,但它不遵守这些规则。

fun average (n::ns) =
let
val (a,b) = ((foldl (fn(x, y)=>(x+y)) n ns), length(ns)+1)
in
real(a) / real(b)
end;

那么,有没有办法让折叠函数返回一个元组?像这样的事情是我想要它做的,但显然我不能这样做......

val (a,b) = ((foldl (fn(x, y)=>(x+y), count++) n ns)

最佳答案

foldl 的返回类型是初始累加器的类型。所以这里的想法是提供一个元组,包括列表中元素的总和和计数:

fun average (n::ns) =
let
val (a, b) = foldl (fn (x, (sum, count)) => (sum+x, count+1)) (n, 1) ns
in
real(a) / real(b)
end

请注意,如果列表为空,您的解决方案将失败,最好添加另一种处理空列表的情况(返回 0.0 或抛出自定义异常):

fun average [] = 0.0
| average (n::ns) = (* the same as above *)

关于functional-programming - Foldl 在 SML 中返回一个元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9724240/

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