使用folr以“类似于Haskell”的语言映射功能

时间:2019-12-08 04:45:19

标签: functional-programming

我正在尝试在Haskell-like language中编写一个map函数。我尝试使用的操作是fold_right。因此,基本上使用map来编写foldr。但是,出现“参数不匹配错误”。

谢谢。

map = lambda X. lambda Y.
  lambda f: X -> Y.
    lambda l: List X.
      l [X] (
        lambda hd:X.
          lambda tl: List Y.
            (cons[Y](f hd))(tl)
      ) (nil [Y]);

1 个答案:

答案 0 :(得分:1)

l的第一个参数应该是弃牌结果的类型(至少,这是我的有根据的猜测),即“动机”。您希望最终结果是List Y,而不是X,因此您应该这样说:

map =
  lambda X. lambda Y. lambda f: X -> Y. lambda l: List X.
    l
      [List Y]
      (lambda x: X. lambda rec_xs: List Y. cons [Y] (f x) rec_xs)
      (nil [Y]);

也许您因为Xl而感到困惑并写了List X吗? l已经知道它包含X个;您无需再次指出。您只需要指出要获取的内容即可(哪个可以X,但在这种情况下不是)。