V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yazinnnn0
V2EX  ›  程序员

最早用箭头(->或=>)来代表 lambda 表达式/匿名函数的语言是什么?

  •  
  •   yazinnnn0 · 306 天前 · 6975 次点击
    这是一个创建于 306 天前的主题,其中的信息可能已经有所发展或是发生改变。

    知乎上看到有人说是 csharp, 搜了一下发现 csharp3.0(07 年)才支持这个语法

    31 条回复    2024-01-23 16:30:28 +08:00
    vToExer
        1
    vToExer  
       306 天前
    在编程语言历史中,代表 Lambda 表达式用箭头符号 "->" 或 "=>" 的确非常常见,但是要找到一个比 JavaScript 更早使用的语言,可能要涉及到一些历史悠久的或者不太为现代编程所熟知的语言。在我所获取的信息中,似乎没有比 JavaScript 更早采用这种表示方式的编程语言。值得注意的是,这并不代表实际上不存在比 JavaScript 更早使用箭头符号的语言,只是这些信息可能无法从当前可获得的资源中找到。
    garipan
        2
    garipan  
       306 天前
    @vToExer #1 你这个是 3.5 的回答不,看看 4 的回答:

    最早采用箭头(-> 或 =>)来表示 lambda 表达式或匿名函数的语言之一是 ALGOL 68 。ALGOL 68 在 1968 年推出,其中引入了使用箭头 "->" 来表示函数类型。此外,另一种语言是 Miranda ,它在 1980 年代早期被开发,使用了"->"来表示匿名函数或 lambda 表达式。

    然而,值得注意的是,"->" 和 "=>" 这样的表示法在后来的很多其他编程语言中变得更加流行,特别是在函数式编程语言中,比如 Haskell (使用 ->)和 Scala (使用 =>)等。这种表示法现在在许多现代语言中普遍存在,用于表示匿名函数或 lambda 表达式。
    Bromine0x23
        3
    Bromine0x23  
       306 天前
    可能是某种函数式语言
    shyangs
        4
    shyangs  
       306 天前   ❤️ 7
    @garipan

    ALGOL 68 和 Miranda 根本沒有箭頭函數.

    你的 ChatGPT4 比 ChatGPT3.5 還會胡說八道. ChatGPT 3.5 至少會說不知道.
    garipan
        5
    garipan  
       306 天前
    @shyangs #4 哈哈 这其实正是我想表达的 AI 回答不靠谱
    Bromine0x23
        6
    Bromine0x23  
       306 天前
    查了下 1973 年的 ML 语言就有用 => 了
    kneo
        7
    kneo  
       306 天前 via Android   ❤️ 17
    不懂别答。贴这些破玩意干什么。
    zxkmm
        8
    zxkmm  
       306 天前   ❤️ 2
    @vToExer 您好,为什么要用 AI 回答来污染论坛?
    更不用说这句车轱辘话根本没有提供有价值信息
    taotaodaddy
        9
    taotaodaddy  
       306 天前
    我这边不联网的 GPT4 也没有乱讲

    而联网的 gpt4 回答的是:

    这个箭头(lambda 或者箭头函数)的表示法最早在 C#语言中出现。随后,JavaScript 在 ES6 版本中借鉴了这个语法,用于表示匿名函数和 lambda 表达式。其实这种语法简化了函数的声明,使代码更加精简,也更容易阅读。
    ssz66666
        10
    ssz66666  
       306 天前 via Android
    可能是(Standard) ML 吧
    geelaw
        11
    geelaw  
       306 天前   ❤️ 1
    从渊源来说这个符号来自于 \mapsto ,初次引入应该是 Bourbaki 著《积分》第一章到第四章的部分,见 https://hsm.stackexchange.com/a/5777 翻了一下,第 13 页有

    Corollaire. On suppose que M(1) = 1 ; alors, pour toute fonction numérique finie f, définie dans X, l'application p ↦ N_p(f) est croissante dans ]0, +∞[.

    如果要找可以机器执行的语言(“编程语言”)则比较困难,一个思路是先找支持 anonymous function 的语言,然后一个一个查看它是否有、何时引入了箭头记号。
    vToExer
        12
    vToExer  
       306 天前
    @kneo @zxkmm 查了一下确实 JavaScript 是正式在 2015 年 ES6 引入箭头符号,并非最早的。撤回我之前的回复。

    是我不懂装懂,盲目相信了 AI 结论,没有仔细求证,浪费了各位 v 友的时间,非常抱歉。
    ladudu
        13
    ladudu  
       306 天前
    @garipan #2 加钱就是不一样
    jgh004
        14
    jgh004  
       306 天前
    @ladudu 兄弟看着有点眼熟啊
    Leviathann
        15
    Leviathann  
       306 天前   ❤️ 6
    http://dobegin.com/lambda-functions-everywhere/

    Lambda function syntax in programming languages
    Language Lambda syntax Ver Year
    Haskell \x -> 2*x+1 1 1990
    Python lambda x: 2*x+1 1 1994
    OCaml/F# fun x -> 2*x+1 1 1996
    Scala x => 2*x+1 1 2004(2)
    C# x => 2*x+1 3 2007(6)
    Ruby -> (x) { 2*x+1 } 1.9 2007(1)
    Groovy { x -> 2*x+1 } 1 2007(2)
    Visual Basic Function (x) 2*x+1 9 2007
    PHP function ($x) { return 2*$x+1; } 5.3 2009
    Objective-C ^(int x) { return 2*x+1; } 3.2 2009(3)
    Clojure (fn [x] (+ (* 2 x) 1)) 1 2009(2)
    C++ [](int x) { return 2*x+1; } 11 2011
    Go func (x int) int { return 2*x+1 } 1 2012(2)
    Java x -> 2*x+1 8 2014
    Swift { x in 2*x+1 } 1 2014
    JavaScript x => 2*x+1 6 2015(4)
    Perl -> $x { 2*$x+1 } 6 2015(5)

    知乎上 C#那帮人一股子饭圈味
    agagega
        16
    agagega  
       306 天前   ❤️ 3
    知乎上很大一部分微软粉丝,吹的并不是微软的东西有多好用,功能多强大,设计多精致,而是乐于将微软那些没有流行的技术或产品,当作代入他们怀才不遇心态的对象。

    总之就是 C#没火,Silverlight 没火,ASP 没火,Windows Server 没火,Edge 换 Chromium ,都不是微软的问题,都是市场有问题,都是用户年纪小没有 taste🤣跟他们讨厌的果粉一个样
    Alias4ck
        17
    Alias4ck  
       306 天前
    @Leviathann 我❤️Haskell
    chenqh
        18
    chenqh  
       306 天前
    @agagega 本身就是技术没问题啊,不然为什么 js 这种 SB 语言会火呢,因为游览器只支持 JS 啊,如果 JS 那么好,为什么 nodejs 在后台开发上不怎么火呢
    cpstar
        19
    cpstar  
       306 天前
    以我浅显对这东西的理解,这东西能不能叫“函数表达式”“函数简式”之类的,单看“拉姆达表达式”不知所云。
    cnbatch
        20
    cnbatch  
       306 天前
    @cpstar 它本身就有另一个称呼,叫做“匿名函数”。

    之所以会叫作“lambda 表达式”,是因为最早期的“匿名函数”出现在 LISP ,但 LISP 并不使用箭头来表达,而是使用关键字 lambda 。

    https://en.wikipedia.org/wiki/Anonymous_function
    https://zh.wikipedia.org/zh-cn/%E5%8C%BF%E5%90%8D%E5%87%BD%E6%95%B0
    https://www.geeksforgeeks.org/lambda-functions-in-lisp/

    于是计算机学界把“匿名函数”叫作“lambda 表达式”已经有几十年的习惯了。

    可以这么说,“匿名函数”其实很早就已经出现在编程语言当中,但使用箭头来表示匿名函数的做法,已经是很后期的时期了(#15 提供的列表)。
    nagisaushio
        21
    nagisaushio  
       306 天前 via Android
    @cnbatch lambda 表达式的叫法我觉得要归因于 lambda caculus ,而不是 Lisp 。
    Uanti
        22
    Uanti  
       306 天前
    你这问题应该去 emacs china 问
    jonty
        23
    jonty  
       306 天前
    @garipan #2 号要没了
    ychost
        24
    ychost  
       306 天前
    我接触过的语言确实是 C# 最早,还有 async/await 、properties 均是来自 C#,不过我现在更喜欢 kotlin/groovy/dart 那种闭包写法,简单点
    ladudu
        25
    ladudu  
       306 天前
    @jgh004 #14 哈哈哈哈
    superedlimited
        26
    superedlimited  
       305 天前 via iPhone
    不管谁是第一个使用的,但 js 的写法是最爽的。
    june4
        27
    june4  
       305 天前
    @superedlimited js 的"->"爽大部分来自于 function 这个单词过于长了😄
    kneo
        28
    kneo  
       305 天前 via Android
    @nagisaushio 你这么说也没错。但我觉得如果没有 lisp ,也许永远不会有人管这个叫 lambda 。也就就叫管它叫匿名函数,甚至函数。
    msg7086
        29
    msg7086  
       304 天前 via Android
    @vToExer hhh 其实 JavaScript 的箭头应该是从 CoffeeScript 借鉴的。
    mind3x
        30
    mind3x  
       304 天前 via Android
    @kneo

    @nagisaushio 说的是正解。Lambda 演算(Lambda Calculus)早在 1930 年代就提出来了,比现代电子计算机出现早几十年。
    drymonfidelia
        31
    drymonfidelia  
       303 天前
    @Livid 1 楼 2 楼 AI 回复还是错的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3219 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 12:16 · PVG 20:16 · LAX 04:16 · JFK 07:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.