接受两个函数并返回一个添加结果的函数

时间:2014-11-17 02:50:16

标签: haskell

我正在编写一个采用多项式数据类型的函数,并将其编译为它所代表的函数。

例如(常数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)

1 个答案:

答案 0 :(得分:1)

makePoly (Add p1 p2) = (\n -> (makePoly p1) n + (makePoly p2) n)

移出:

  1. 创建第一个多边形:makePoly p1
  2. n(makePoly p1) n
  3. 进行评估
  4. 与第二个相同:(makePoly p2) n
  5. 将它们组合在一起并包裹在lambda中。
  6. 这也应该告诉你如何定义add f g

    你这里也有问题:

    makePoly (PConst n) = \n->n
                           ^
    

    第三个n将引用第二个n,而不是第一个n