Haskell编写你的($)函数版本

Joa*_*nna -1 haskell

有人可以帮我编写自己的($)函数版本吗?这是我的尝试不起作用.

f function (x:xs) = f (x:xs)
Run Code Online (Sandbox Code Playgroud)

lef*_*out 6

首先,为什么你认为你需要:foldr在这里?这些是列表专有的.$与列表无关.

f function (x) = f (x)是更喜欢它,但它似乎你感到困惑,你是否定义functionf作为参数,反之亦然.事实上,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)