【CSDN 編者按】有點雷人,,Excel 不僅僅是辦公軟件,,還是編程語言……言歸正傳,Excel 作為編程語言還存在一些不足,。為了彌補這些缺陷,,Excel 團隊與微軟劍橋研究院建立了長期合作關系。好消息接連傳來…… 作者 | Andy Gordon 譯者 | 彎月 出品 | CSDN(ID:CSDNnews) 微軟的 Excel 幾乎是家喻戶曉的辦公軟件,,它也是世界上使用最廣泛的編程語言,。編寫 Excel 公式的用戶甚至超過了 C、C++,、C#,、Java 和 Python 程序員的總和。盡管 Excel 取得了巨大的成功,,但作為一種編程語言它仍然有一些基本的弱點,,其中最突出的兩大弱點是:
為了解決這兩個問題,,微軟劍橋研究院與 Excel 團隊建立了長期合作關系,,致力于將電子表格公式轉換為成熟的編程語言。二者合作的成果逐步出現(xiàn)在產品中,。在 2019 年 ACM SIGPLAN 編程語言原理研討會(POPL 2019)上,,微軟宣布了兩項重大進展:Excel 的數(shù)據(jù)類型不再限于文本和數(shù)字,允許單元格包含原生記錄類型,,包括鏈接到外部數(shù)據(jù)的實體以及動態(tài)數(shù)組(允許普通公式計算整個數(shù)組,,結果溢出到相鄰單元格中)等。這些變化都是為了解決第一個問題,,即在 Excel 中建立豐富的,、完整的、原生的結構化數(shù)據(jù),。 2020 年 12 月,,微軟發(fā)布了 LAMBDA,允許用戶通過 Excel 的公式語言編寫新函數(shù),,這可以直接解決第二個問題,。這些新定義的函數(shù)可以調用其他的 LAMBDA 函數(shù),,深度不限,甚至可以遞歸,。有了 LAMBDA 后,,Excel 已具備圖靈完備性。理論上來說,,你可以使用 Excel 公式語言編寫任何計算?,F(xiàn)在,加入 Insiders:Beta 計劃的用戶已經可以使用 LAMBDA 了,。在 2021 年的 POPL 大會上,,微軟的視頻中討論了 LAMBDA 以及電子表格的一些研究。 LAMBDA 的功能研究人員都知道自 1960 年代以來,,邱奇的 lambda 表示是很多編程語言的基礎,,因此,它本身就是一種富有表現(xiàn)力的編程結構,。融合 lambda 為 Excel 帶來了一次從量變到質變的提升,。 為了說明 LAMBDA 強大的功能,下面我們使用這種表示法編寫一個函數(shù),,計算直角三角形的斜邊長: =LAMBDA( X, Y, SQRT( X*X+Y*Y ) ) LAMBDA 是 2020 年 3 月發(fā)布的 LET 的補充,,因此,這個示例也可以寫成下面這樣: =LAMBDA( X, Y, LET( XS, X*X, YS, Y*Y,SQRT( XS+YS ) ) ) 這個函數(shù)有兩個參數(shù):X 和 Y,。函數(shù)的功能是將 X*X 的值綁定到 XS 中,,Y*Y 的值綁定到 YS,結果返回 SQRT(XS+YS ),。 我們可以利用 Excel 中已有的命名管理器,,為這個公式命名。如果我們?yōu)樵摵瘮?shù)取名 PYTHAGORAS,,則 PYTHAGORAS(3,4)的結果就等于 5,。在完成命名后,你可以通過函數(shù)名調用函數(shù),,因此也就不需要重復整個公式了,。 而且,LAMBDA 就是那個我們熟知且喜愛的lambda:lambda 可以是另一個lambda 的參數(shù)或者結果,;你可以定義邱奇數(shù),;lambda 可以返回 lambda,所以也可以實現(xiàn)柯里化,;使用 LAMBDA 定義不動點組合子,進而編寫遞歸函數(shù),;等等,。(此外,,lambda 也可以擁有函數(shù)名,因此它們可以直接遞歸調用自己,,這比使用不動點組合子要方便得多,。) 遞歸調用:反轉字符串和不動點組合子反轉字符串不屬于 Excel 的內置功能,以前只能使用 Visual Basic 或 JavaScript 等語言編寫,。在下圖中,,REVERSE 是一個遞歸 LAMBDA,它使用一對輔助函數(shù) HEAD 和 TAIL,,分別獲取第一個字符以及除第一個字符以外的所有字符,。 即便不依靠遞歸定義的名稱,Excel 的公式語言也是圖靈完備的,,因為我們可以使用傳統(tǒng)的按值調用不動點組合子,,對遞歸函數(shù)定義進行編碼。實際上,,在 Excel 代碼庫中,,運行這種組合子也是 LAMBDA 早期的壓力測試之一。下圖定義了一個階乘函數(shù),。 下一步的計劃我們還有很多計劃,。近期內即將發(fā)布的還有可嵌套的數(shù)組,以及更有效的處理數(shù)組的組合子,,比如 MAP 和 REDUCE,,這些組合子可以將lambda函數(shù)作為參數(shù)。除此之外,,我們還希望不僅可以通過公式來定義函數(shù),,而且還可以利用整個工作表來定義函數(shù),即所謂的工作表定義函數(shù),,甚至是彈性工作表定義函數(shù),。實際上,工作表定義的函數(shù)遵循的是常見的電子表格設計,,用戶可以通過分布在多個單元格上的多個公式來定義更大的函數(shù),。 社區(qū)的回應只有當用戶能夠輕松、有效地使用某種編程語言,,才能說這種語言取得了成功,。有些人可能認為 LAMBDA 只適合編程語言愛好者,但對于最終用戶來說太難了,。在發(fā)布 LAMBDA 時,,微軟發(fā)動了一場全球規(guī)模的實驗,看看最終用戶是否能夠適應高階函數(shù)的編程。 最初得到的一些反饋很鼓舞人心,。12 月,,在 LAMBDA 發(fā)布的 24 小時內,我們收到了很多的視頻,,包括將數(shù)據(jù)拆分成多列和使用 LAMBDA 和 LET 來創(chuàng)建單個單元格報告的視頻,,還有一些博客帖子,包括計算軸刻度等,,社區(qū)提供了很多我們從未想到的應用 LAMBDA 的方式,。 此外,雖然編寫 lambda 需要專業(yè)的技能和知識,,但調用 lambda 并不需要高端的技術,。技術人員可以利用 LAMBDA 擴展 Excel,編寫特定于應用程序的函數(shù),,而他們的同事則可以直接在 Excel 中調用這些函數(shù),。 我們期待,用戶進行各種實驗,,不僅是 LAMBDA,,還有數(shù)據(jù)類型和動態(tài)數(shù)組。我們相信這些新的函數(shù)式編程功能將改變人們使用 Excel 做決策的方式,。 參考鏈接:https://www.microsoft.com/en-us/research/blog/lambda-the-ultimatae-excel-worksheet-function/ |
|