在
给出的TAKE
函数中
fun TAKE (xs,0) = []
| TAKE (NIL, n) = raise Subscript
| TAKE (CONS (x,xf),n) = x :: TAKE(xf(), n-1);
什么是xs,x,xf? 你还可以告诉我功能如何运作。
答案 0 :(得分:1)
你的take函数似乎在某种类型的数据结构上运行,比如
datatype 'a stream = NIL | CONS of 'a * (unit -> 'a stream)
您的take函数遍历流数据结构并从中取出n
个元素,并返回包含这些元素的列表。
标识符xs
是保存流数据结构的函数参数,标识符n
是包含要检索的元素数量(即take)的函数参数。标识符x
,xf
是模式,它们绑定到CONS
单元格的值,因此x
是头部(即'a
)和{ {1}}是尾部(即xf
。
我的印象(根据您的问题),您需要更深入地了解SML和函数式编程,以便理解这个答案。很可能你不会在这里提出问题。我建议你找一本好的参考书,比如这里的information section of the SML tag中建议的那样。
您可能还想阅读好书3.5 Streams中的Structure and Interpretation of Computer Programs部分。本书中的代码在Scheme中。可能需要一段时间才能完成(如果您不熟悉任何与lisp相关的语言),但值得付出努力。