如何在SML中生成输入/输出元组?

时间:2017-04-10 04:24:14

标签: recursion functional-programming sml caml ml

我正在研究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开始直到达到指定整数的每个值?

感谢您的帮助。

2 个答案:

答案 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非常简单。