【问题标题】:TAKE function in SMLSML 中的 TAKE 函数
【发布时间】:2013-11-18 23:34:57
【问题描述】:

TAKE函数中

fun TAKE (xs,0)          = []
  | TAKE (NIL, n)        = raise Subscript
  | TAKE (CONS (x,xf),n) = x :: TAKE(xf(), n-1);

什么是 xs、x、xf? 能否请您告诉我 take 函数是如何工作的。

【问题讨论】:

    标签: sml


    【解决方案1】:

    您的 take 函数似乎在某种类型的数据结构上运行,例如

    datatype 'a stream =  NIL | CONS of 'a  *  (unit -> 'a stream)
    

    您的 take 函数遍历流数据结构并从中取出 n 元素,并返回包含这些元素的列表。

    标识符xs 是保存流数据结构的函数参数,标识符n 是保存要检索(即取)元素数量的函数参数。标识符x,xf 是模式,它们绑定到CONS 单元格的值,所以x 是头部(即'a),xf 是尾部(即(unit -> 'a stream) .

    我的印象(基于您的问题)是,您需要更深入地了解 SML 和一般的函数式编程才能理解这个答案。很可能你不会在这里提出问题。我建议您购买一本好的参考书,就像 SO 中 information section of the SML tag 中建议的那些。

    您可能还想阅读伟大书籍Structure and Interpretation of Computer Programs 中的3.5 Streams 部分。书中的代码在Scheme中。可能需要一段时间才能完成所有操作(如果您不熟悉任何与 lisp 相关的语言),但值得付出努力。

    【讨论】:

      猜你喜欢
      • 2015-06-19
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 2012-01-23
      相关资源
      最近更新 更多