如果我将多项式表示为函数: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)每次访问一个元素。我不想要一个明确的答案,但我需要帮助!
答案 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