Sml 将列表中的数字平方,然后将它们相加
我试图创建一个函数,将ML列表中的数字平方,然后将这些数字相加Sml 将列表中的数字平方,然后将它们相加,sml,ml,Sml,Ml,我试图创建一个函数,将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 或者您可以将map和foldl
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
或者您可以将map
和foldl
融合在一起:
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
尽管像
map
和foldl
这样的高阶列表组合词非常有用,一旦你习惯了它们,就可以提高代码的可读性,但使用手动递归解决介绍性练习对学习过程非常有价值;毕竟,map
和foldl
是这样构建的。编写一个函数sum
,将列表中的元素相加而不求平方。把它应用到你的平方列表中。