【发布时间】:2013-01-22 04:27:00
【问题描述】:
我需要编写一个函数,它接受一个字符串列表并在列表中找到最大的字符串。问题是它需要使用 List.foldl 遍历列表,并且不能使用递归调用,除了 List,foldl 的库函数中的调用。
我写的
fun longest_string1(xs)=
case xs of
[] => ""
| x::xs' => List.foldl((fn (s,x) => if String.size s > String.size x then s else x) "" x,)
我的解释如下:
- 取入 xs,如果 xs 为空,则返回一个空字符串
- 否则对于 xs 的第一项调用 List.foldl
-List.foldl 传入一个匿名函数来检查 s 的长度,它应该代表累加器与列表的头项目。
-设置初始累加器为空字符串,初始比较值设置为高阶函数传入的初始列表的头部
但是,它不进行类型检查。
我认为我的问题在于对 List.foldl 函数本身的理解以及它如何准确地读取其参数。有人可以提供一些澄清吗?
【问题讨论】:
标签: list functional-programming iterator sml metalanguage