我正在尝试在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]);
答案 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]);
也许您因为X
是l
而感到困惑并写了List X
吗? l
已经知道它包含X
个;您无需再次指出。您只需要指出要获取的内容即可(哪个可以为X
,但在这种情况下不是)。