多项式作为函数SML

时间:2013-10-15 09:50:07

标签: sml ml

如果我将多项式表示为函数: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不是递归的。我可以从列表的长度找到poly的顺序,我可以使用x :: l访问该列表中的每个元素但是如何构建此函数(fn 0 => 1 | 1 => 5)每次访问一个元素。我不想要一个明确的答案,但我需要帮助!

1 个答案:

答案 0 :(得分:0)

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

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