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

343 天前
 yazinnnn0

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

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

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

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

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

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

而联网的 gpt4 回答的是:

这个箭头(lambda 或者箭头函数)的表示法最早在 C#语言中出现。随后,JavaScript 在 ES6 版本中借鉴了这个语法,用于表示匿名函数和 lambda 表达式。其实这种语法简化了函数的声明,使代码更加精简,也更容易阅读。
ssz66666
343 天前
可能是(Standard) ML 吧
geelaw
343 天前
从渊源来说这个符号来自于 \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
343 天前
@kneo @zxkmm 查了一下确实 JavaScript 是正式在 2015 年 ES6 引入箭头符号,并非最早的。撤回我之前的回复。

是我不懂装懂,盲目相信了 AI 结论,没有仔细求证,浪费了各位 v 友的时间,非常抱歉。
ladudu
343 天前
@garipan #2 加钱就是不一样
jgh004
343 天前
@ladudu 兄弟看着有点眼熟啊
Leviathann
343 天前
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
343 天前
知乎上很大一部分微软粉丝,吹的并不是微软的东西有多好用,功能多强大,设计多精致,而是乐于将微软那些没有流行的技术或产品,当作代入他们怀才不遇心态的对象。

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1010222

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX