我正在研究SML中的一个项目,我需要编写一个函数,它将函数和整数作为输入。此函数需要为传递给它的给定函数生成输入/输出元组列表。例如,如果我像这样调用函数:
finiteListRepresentation(square, 5);
其中:
fun square(x) = x*x
该函数需要返回元组列表:
[(1,1),(2,4),(3,9),(4,16),(5,25)]
显然,square函数可以是任何函数,例如整数立方体函数或类似函数。我遇到的问题是让函数递归“访问”从指定值开始的每个整数。我是SML的新手,我可以让函数返回单个值,例如:
finiteListRepresenation(f, x) = [(x, f(x))]
有人可以帮助我如何推广这个函数来计算从1开始直到达到指定整数的每个值?
感谢您的帮助。
答案 0 :(得分:0)
由于您似乎正在寻找的提示不仅仅是一个解决方案,请查看map
function并尝试找出它可以提供的帮助:
val map : ('a -> 'b) -> 'a list -> 'b list
map f l
从左到右将
f
应用于l
的每个元素,返回结果列表。
答案 1 :(得分:0)
我遇到的问题是以递归方式获取功能"访问"从指定值开始的每个整数。
尝试编写辅助函数range : int * int -> int list
,它枚举下限和上限之间的整数。例如,
val [2,3,4,5,6,7] = range (2, 7)
要开始使用,请考虑以自身方式递归地实施range
。这是一个暗示:
(* assume i <= j *)
fun range (i, j) =
if i = j then (* TODO *)
else i :: (* TODO *)
完成此功能后,使用List.map finiteListRepresentation
非常简单。