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

haskell到javascript lamba函数转换

  •  1
  • GibboK  · 技术社区  · 6 年前

    我在Haskell中有以下lambda函数:

    cup size = \message -> message size

    我想知道javascript中的等效版本是什么(为了学习),目前我编写了以下版本,如果它是正确的,我想知道。

    const cup = size => (message => message)(size)

    2 回复  |  直到 6 年前
        1
  •  8
  •   melpomene    6 年前

    您的javascript代码与

    cup = \size -> (\message -> message) size
    

    在哈斯克尔因为 \message -> message 是标识函数,这与

    cup = \size -> size
    

    又是身份函数:

    cup = id
    

    正确的翻译应该是

    const cup = size => message => message(size)
    

    function cup(size) { return message => message(size); }
    
        2
  •  3
  •   jo_va    6 年前

    您的haskell lambda接受一个参数并返回一个lambda,该lambda反过来接受一个函数作为参数,并将该函数与给定给cup的参数一起应用。

    在javascript中,等价物是:

    const cup = size => (message => message(size))
    

    您可以不使用括号重写它:

    const cup = size => message => message(size)