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

时间:2016-06-03 21:41:05

标签: haskell

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

f function (x:xs) = f (x:xs)

2 个答案:

答案 0 :(得分:6)

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

f function (x) = f (x)更像是它,但是您似乎对于将function定义为f作为参数感到困惑,反之亦然。事实上,f function (x) = f (x)意味着:

f = \function x -> f x

即。你将f定义为一个函数,它接受一个名为function的参数(实际上从未使用过)和另一个参数x,然后它应用你正确定义的函数在这里......这种递归打结在Haskell中实际上是可行的(有时非常有用),但在这种情况下它没有任何意义。

你真正想要写的东西要简单得多:

f $ x = f x

请注意$,因为它由非字母符号组成,是一个中缀,因此解析不同:

($) = \f x -> f x

这意味着,$接受一个函数和一个参数,并将该函数应用于参数;就是这样。

你也可以使用反引号用字母名称来实现这一点,将其解析为中缀:

f `function` x = f x

......或者只是

function f x = f x

答案 1 :(得分:4)

% ghci
GHCi, version 7.10.3: http://www.haskell.org/ghc/  :? for help
Prelude> :i ($)
($) :: (a -> b) -> a -> b       -- Defined in ‘GHC.Base’
infixr 0 $

所以我们只需复制和粘贴,定义我们自己的$$(借用@leftaroundabout已经提出的讨论中的逻辑):

($$) :: (a -> b) -> a -> b
f $$ x = f x
infixr 0 $$