使用lambdas实现Haskell函数

使用lambdas实现Haskell函数,haskell,Haskell,是否需要将所有输入转换为Haskell中的lambdas? 我只实现了将f转换为\f的映射功能。 并且在运行时发生错误(附在下面)。 是否需要将所有输入转换为Haskell中的lambdas 事实上,lambda通常只出现在高级抽象中 从 编译器推断xs的类型是一个列表。从 map_ xs = ... 编译器推断list是map\uu的第一个参数 但是在调用map\uuu时,您将函数作为第一个参数;名单排在第二位。Prelude中map的标准类型为 map :: (a -> b) -&g

是否需要将所有输入转换为Haskell中的lambdas?
我只实现了将f转换为\f的映射功能。
并且在运行时发生错误(附在下面)。

是否需要将所有输入转换为Haskell中的lambdas

事实上,lambda通常只出现在高级抽象中

编译器推断
xs
的类型是一个列表。从

map_ xs = ...
编译器推断list是
map\uu
的第一个参数

但是在调用
map\uuu
时,您将函数作为第一个参数;名单排在第二位。
Prelude
map
的标准类型为

map :: (a -> b) -> [a] -> [b]
首先是low函数,然后是list


那么你打算做什么?

我想当我表示“map_xs=\f->…”时,它意味着我应该按照map_xs的顺序输入。你的解决方案真的奏效了。谢谢大家!@蓝山是什么让你有这个想法的<代码>地图只是一个不同的名称。而使用
map
可以表示完全忽略了第一个参数。事实上,也有一种语法速记法用于翻转参数,但它需要滥用中缀节表示法:
(`map`xs)f
fx=…
f=\x->…
基本上是等价的。对于“多个”参数,您可以按相同的顺序剥离它们<代码>f x y=和
fx=\y->…
f=\x->\y->…
所有(大部分)等效项。(我说“大部分”,是因为不值得在这里讨论细微的差异……而且因为我无法准确解释上述差异。)
case xs of
  [] -> ...
  y:ys -> ...
map_ xs = ...
map :: (a -> b) -> [a] -> [b]