gpt4 book ai didi

sml - 列表中的平方数,然后将它们相加

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

我正在尝试创建一个函数来对 ML 列表的数字求平方,然后将这些数字相加

fun sqsum(lst) = map (fn x => x*x) lst;

我那里有一个列表并返回每个数字的平方列表,但我无法弄清楚加法部分。

最佳答案

您可以一次解决一个子问题并组合结果:

val sq = map (fn x => x*x)
val sum = foldl (fn (x, result) => x + result) 0
val sqsum = sum o sq

或者您可以将 mapfoldl 融合在一起:

val sqsum = foldl (fn (x, result) => x*x + result) 0

或者您可以使用递归定义来编写此函数:

fun sqsum (x::xs) = x*x + sqsum xs
| sqsum [] = 0

并最终将其改进为尾递归:

fun sqsum L =
let fun f (x::xs) result = f xs (x*x + result)
| f [] result = result
in f L 0 end

即使像 mapfoldl 这样的高阶列表组合器非常有用,一旦你习惯了它们就会提高代码的可读性,使用手动递归解决入门练习对学习过程非常有值(value);毕竟,mapfoldl 就是这样构建的。

关于sml - 列表中的平方数,然后将它们相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49417378/

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