【问题标题】:How can I generate input / output tuples in SML?如何在 SML 中生成输入/输出元组?
【发布时间】:2017-09-05 00:18:39
【问题描述】:

我正在做一个 SML 项目,我需要编写一个将函数和整数作为输入的函数。此函数需要为传递给它的给定函数生成输入/输出元组列表。例如,如果我这样调用函数:

finiteListRepresentation(square, 5);

地点:

fun square(x) = x*x

函数需要返回元组列表:

[(1,1),(2,4),(3,9),(4,16),(5,25)]

显然,平方函数可以是任何函数,例如整数立方函数或类似的函数。我遇到的问题是让函数从指定的值开始递归地“访问”每个整数。我对 SML 很陌生,我可以让函数返回单个值,例如:

finiteListRepresenation(f, x) = [(x, f(x))]

谁能帮助我如何推广这个函数来计算从 1 开始的每个值,直到它达到指定的整数?

感谢您的帮助。

【问题讨论】:

    标签: recursion functional-programming sml caml ml


    【解决方案1】:

    由于您似乎在寻找提示而不是解决方案,请查看map function 并尝试找出它如何提供帮助:

    val map : ('a -> 'b) -> 'a list -> 'b list
    
    map f l
    

    从左到右将f 应用于l 的每个元素,返回结果列表。

    【讨论】:

    • 感谢您的回复。我想我的主要问题是递归枚举 SML 中的数字。例如,如果我想创建一个接受单个整数并生成从 1 到该整数的列表的函数,我将如何递归地执行此操作?
    【解决方案2】:

    我遇到的问题是让函数从指定值开始递归地“访问”每个整数。

    尝试编写一个辅助函数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 *)
    

    一旦你有了这个功能,finiteListRepresentation 应该很简单,List.map

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多