gpt4 book ai didi

SML/NJ - 使用foldr 的一行长度函数

转载 作者:行者123 更新时间:2023-12-02 07:52:17 27 4
gpt4 key购买 nike

我正在尝试创建一个长度函数,类似于 ML 中已包含的函数。我的限制是它必须在一行上完成并使用map、foldl 或foldr。

现在我的代码行如下所示:

val mylength = foldr ( fn(x,y) => 1+y) 0;

我绝不是机器学习方面的专家,但到目前为止我的推理是这样的:

据我了解,foldr 将从列表中的最后一项开始,将其作为 x 参数传递到我的函数中,并使用 0 作为初始 y 值。然后它应该将 y 值加 1 并且基本上忽略 x。理论上,我相信这会给我我的总长度。但是我收到以下错误:

 stdIn:136.5-136.37 Warning: type vars not generalized because of
value restriction are instantiated to dummy types (X1,X2,...)
val mylength = fn : ?.X1 list -> int

我的大问题是弄清楚如何创建这个函数以使其可以接受任何类型的列表。

如果有人可以提供一些关于如何解决这个问题的建议,我将不胜感激,也许我还没有完全理解 ML 的编程风格。

最佳答案

你的函数本质上是正确的。根据您使用的解释器,它将接受给定的代码或拒绝它。例如,在 CloudML 上运行您的代码会做得很好。为了避免这个问题,请将其定义为这样的函数:

fun mylength l =foldr ( fn(x,y) => 1+y) 0 l;

华盛顿大学的 Daniel Grossman 在他的一个类中解释说,这个错误与可变引用有关。遗憾的是,我记不清他在哪节课中提到过这一点。

同时您可以考虑以下事项:

关于SML/NJ - 使用foldr 的一行长度函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33483703/

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