0

如果我认为多项式可以表示为以下函数: type P= int*(int->int) 其中第一个 int 是多项式的阶, (int->int) 是一个函数,它接受并索引并返回系数.

我应该写一个给定一个列表的函数,它给了我一个该类型的多项式,例如 form([1]) 给出 (0,fn 0=>1)) 但问题是在写类似的东西时

form([1,5]) 给出 (1,fn 0=>1|1=>​​5))

我对 fn 0=>1|1=>​​5 部分很困惑,因为 fn 不是递归的。我可以从列表的长度中找到多边形的顺序,我可以使用 x::l 访问该列表中的每个元素,但是如何在每次访问时构建这个函数(fn 0=>1|1=>​​5)的一个元素。我不想要一个明确的答案,但我需要帮助!

4

1 回答 1

0

使用List结构中的方法,这可以通过制作笛卡尔函数的柯里化版本来实现List.nth

fun form nil = raise Empty
  | form xs  = (List.length xs - 1, fn i => List.nth (xs, i))

如果您想自己实现具有nth功能的函数,它可能如下所示:

fun form xs = 
  let
    fun nth nil     _ = raise Subscript
      | nth (y::_)  0 = y
      | nth (_::yr) i = nth yr (i - 1)
  in
    (List.length xs - 1, nth xs)
  end
于 2013-10-16T10:09:25.653 回答