SML中的TAKE功能

时间:2013-11-17 17:55:39

标签: sml

给出的TAKE函数中
fun TAKE (xs,0)          = []
  | TAKE (NIL, n)        = raise Subscript
  | TAKE (CONS (x,xf),n) = x :: TAKE(xf(), n-1);

什么是xs,x,xf? 你还可以告诉我功能如何运作。

1 个答案:

答案 0 :(得分:1)

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

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

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

标识符xs是保存流数据结构的函数参数,标识符n是包含要检索的元素数量(即take)的函数参数。标识符xxf是模式,它们绑定到CONS单元格的值,因此x是头部(即'a)和{ {1}}是尾部(即xf

我的印象(根据您的问题),您需要更深入地了解SML和函数式编程,以便理解这个答案。很可能你不会在这里提出问题。我建议你找一本好的参考书,比如这里的information section of the SML tag中建议的那样。

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