【发布时间】: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
在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
您的 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 相关的语言),但值得付出努力。
【讨论】: