代码之家  ›  专栏  ›  技术社区  ›  ryeguy

部分应用程序在这里如何工作?

  •  2
  • ryeguy  · 技术社区  · 14 年前
    > map (++ "!") ["a", "b", "c"]
    ["a!","b!","c!"]
    > (++) "!" "a"
    "!a"
    

    这两行对我来说没有意义。使用时 ++ map ,第一个参数似乎附加到了第二个参数,但在第二个列表中却是相反的。哈斯克尔如何解释 地图 功能?

    3 回复  |  直到 13 年前
        1
  •  9
  •   C. A. McCann Ravikant Cherukuri    14 年前

    这个 (++ "!") 是一种特殊的语法,称为 operator section . 部分应用了 第二 (++) "!" 工作方式类似于普通的部分应用程序,并且正在应用第一个参数。

    您还可以对使用中缀样式的常规函数和反勾号执行相同的操作: (`map` [1..3]) 相当于 (\f -> map f [1..3])

    这看起来很奇怪,因为它是一个特殊的情况下,额外的功能,在那里只是因为它是该死的有用。

        2
  •  2
  •   Lily Ballard    14 年前

    (++ "!") (\x -> x ++ "!") (++ "!") 很聪明知道 "!" (++) . 它知道这个因为它知道那个 ++ 是中缀运算符。在第二个表达式中, (++) "!" "a" "!" ++ "a" ,做你想做的事。

        3
  •  2
  •   devoured elysium    14 年前
    map (++ "!) ["a", "b", "c"]
    

    ["a" ++ "!", "b" ++ "!", "c" ++ "!"]
    

    (++) "!" "a"
    

    相当于

    "!" ++ "a"
    

    希望这有帮助。