有人可以帮我编写自己的($)函数版本吗?这是我的尝试不起作用.
f function (x:xs) = f (x:xs)
Run Code Online (Sandbox Code Playgroud)
首先,为什么你认为你需要:或foldr在这里?这些是列表专有的.$与列表无关.
f function (x) = f (x)是更喜欢它,但它似乎你感到困惑,你是否定义function与f作为参数,反之亦然.事实上,f function (x) = f (x)意味着:
f = \function x -> f x
Run Code Online (Sandbox Code Playgroud)
即你定义f为一个函数,它接受一个被调用的参数function(实际上从未使用过)和另一个参数x,然后它应用你正在这里定义的函数......这种递归打结实际上是可能的在Haskell中(有时非常有用),但在这种情况下它没有任何意义.
你真正想要写的东西要简单得多:
f $ x = f x
Run Code Online (Sandbox Code Playgroud)
请注意$,因为它由非字母符号组成,所以是一个中缀,因此进行了不同的解析:
($) = \f x -> f x
Run Code Online (Sandbox Code Playgroud)
这意味着,$接受一个函数和一个参数并将该函数应用于参数; 而已.
你也可以用一个带字母的名字来实现这一点,使用反引号将它解析为一个中缀:
f `function` x = f x
Run Code Online (Sandbox Code Playgroud)
......或者干脆
function f x = f x
Run Code Online (Sandbox Code Playgroud)