我正在编写一个采用多项式数据类型的函数,并将其编译为它所代表的函数。
例如(常数4)只是常数4,
(添加Poly Poly)可以是Add(常数1)(常数4)
其中函数应返回函数(\ n-> 1 + 4)
如果是Add(常数1)变量,则该函数应返回(\ n-> 1 + n)。
问题是,在顶层,我有
makePoly :: Poly -> (Int->Int)
makePoly (PConst n) = \n->n
makePoly (Add p1 p2) = makePoly p1 ?? makePoly p2 <- what should I do here?
如何编译这两个返回的函数(如果它们都是常量,可以回复为(\ n-&gt; n)(\ n-&gt; n)加入?我应该添加一个辅助函数,它接受两个函数并返回它们的输出之和吗?
编辑:如果是这种情况,我该怎么做呢?
add :: (Int->Int)->(Int->Int)->(Int->Int)
add f g = ?
再次编辑:为@ user5402提供的任何搜索的答案:
makePoly (Add p1 p2) = (\n -> (makePoly p1) n + (makePoly p2) n)
答案 0 :(得分:1)
makePoly (Add p1 p2) = (\n -> (makePoly p1) n + (makePoly p2) n)
移出:
makePoly p1
n
:(makePoly p1) n
(makePoly p2) n
这也应该告诉你如何定义add f g
。
你这里也有问题:
makePoly (PConst n) = \n->n
^
第三个n
将引用第二个n
,而不是第一个n
。