gpt4 book ai didi

function - SML NJ 的内部函数

转载 作者:行者123 更新时间:2023-12-02 21:49:08 24 4
gpt4 key购买 nike

我是 sml 的新手,并且在内部函数的语法方面遇到了麻烦。我需要做的是获取一个整数列表的列表,对每个列表求平均值,然后返回一个实数列表。这是我到目前为止的伪代码。

 fun listAvg [] = 0  
else (sum (x) div size (x))

fun sum[] = 0
| sum(head::rest)= head + sum rest;


fun size [] = 0
| size(head::rest) = 1 + size rest;

listAvg([[1,3,6,8,9], [4,2,6,5,1], [9,5,9,7], [5,4], [3,6,4,8]]);

任何建议将不胜感激。谢谢!

最佳答案

使用let,如

fun listAvg [] = 0  
| listAvg x =
let
fun sum[] = 0
| sum(head::tail)= head + sum tail;
fun size [] = 0
| size(head::tail) = 1 + size tail;
in
(sum x) div (size x)
end

您必须将 int 列表 传递给此函数,例如

listAvg [1, 2, 3, 4];

除了重新排列顺序并放置关键字 letinend 之外,这不会对您的代码进行任何更改。如果这不是家庭作业,我建议在 List 结构中使用一些内置标准库函数,可以将此函数减少到两行,包括空列表上的模式匹配。

编辑:

“对整数列表进行平均”有两种可能的含义。第一种方法是对每个列表求平均值,然后取平均值,第二种方法是将这些列表连接成一个长列表,然后对整个列表求平均值。当所有整数列表的长度相同时,这两种方法是等效的(舍入误差除外),但如您的示例所示,它们的长度不必相同。

由于这是家庭作业,我不会直接给你答案,但请考虑以下内容,这可能会有所帮助:

  • 如果您使用的是“平均整数列表的列表”的第一种解释:有一个内置的 SML 函数,可以让您将另一个函数应用于列表的每个元素,并获取结果列表。这可能有助于获得个人平均值,然后您可以将其合并为总体平均值。
  • 如果您使用第二种解释:有一个内置的 SML 函数(它看起来像一个运算符,但 SML 中许多看起来像运算符的东西只是中缀函数)将两个列表连接在一起,并且内置 SML 函数,用于将函数应用于列表中的元素以及累加器值,以生成单个值。您也许可以使用这两个函数创建一个包含所有数字的长列表,然后对其进行平均。

关于function - SML NJ 的内部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9388711/

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