部分 - 为什么我需要在这里使用反引号?

时间:2013-12-19 11:38:48

标签: haskell

我想了解各个部分,并认为我已经得到了它。基本上,它是将部分应用程序应用于二元运算符的一种方法。所以我理解所有(2*)(+1)等示例都很好。

但是在O'Reilly Real World Haskell的书中,Sections'section':)有这个例子:

(`elem` ['a'..'z']) 'f'
>True

我理解括号的必要性 - 即节语法。但为什么我需要反击?

如果我尝试,我会:

(elem ['a'..'z']) 'f'

<interactive>:220:19:
    Couldn't match expected type `[[Char]]' with actual type `Char'
    In the second argument of `elem', namely 'f'
    In the expression: (elem ['a' .. 'z']) 'f'
    In an equation for `it': it = (elem ['a' .. 'z']) 'f'

1 个答案:

答案 0 :(得分:37)

在Haskell中,反引号将名称转换为中缀运算符:

a `elem` b = elem a b

所以

(`elem` b) a = (\x -> x `elem` b) a
             = a `elem` b
             = elem a b

虽然

(elem b) a = elem b a