Hướng dẫn is excel turing-complete - excel turing-hoàn thành

Với sự ra đời của Lambda, Excel giờ đã trở thành một ngôn ngữ lập trình chính thức. Theo Microsoft, Excel là Turing-Complete và người dùng có thể viết bất kỳ tính toán nào bằng ngôn ngữ công thức Excel.

Excel là Turing-Complete

Microsoft Excel lần đầu tiên được giới thiệu vào những năm 1980, và kể từ đó, nó đã trở thành nền tảng để tổ chức, phân tích và trực quan hóa dữ liệu. Excel là ngôn ngữ lập trình được sử dụng rộng rãi nhất và các công thức của nó được sử dụng nhiều hơn C, C ++, Java, Python kết hợp, Microsoft tuyên bố.

Belamy

Đăng ký liều hàng tuần của bạn về những gì đang hoạt động trong công nghệ mới nổi.

Đối với lâu nhất, Excel phải chịu hai thiếu sót chính:

  • Excel chỉ hỗ trợ các giá trị vô hướng như số, chuỗi và booleans
  • Nó không có điều khoản cho các chức năng do người dùng xác định

Dự án tình báo của Microsoft Research, đã dẫn đầu việc chuyển đổi các công thức bảng tính thành ngôn ngữ lập trình chính thức. Sự phát triển đầu tiên diễn ra tại Hội nghị chuyên đề ACM Sigplan 2019 về các nguyên tắc của ngôn ngữ lập trình (POPL 2019). Microsoft đã thực hiện hai thông báo chính: có giá trị dữ liệu chỉ ngoài văn bản và số và cho phép các ô bao gồm các bản ghi hạng nhất; và cho phép sử dụng các công thức thông thường để tính toán các mảng hoàn chỉnh.

Cũng đọc

Dựa trên điều này, Microsoft đã sớm công bố phiên bản Beta của Lambda. Trước đây, Excel cho phép các chức năng tùy chỉnh do người dùng xác định, nhưng chúng phải được viết bằng các ngôn ngữ như JavaScript. Mặt khác, Lambda cho phép người dùng xác định các chức năng tùy chỉnh của họ bằng ngôn ngữ lập trình Excel. Nó cũng cho phép gọi chức năng. & NBSP;

Turing Complete (một khái niệm có nguồn gốc từ khoa học máy tính lý thuyết) có nghĩa là ngôn ngữ lập trình mạnh mẽ về hiệu suất, bảo trì và sự phong phú của hệ sinh thái. Một ngôn ngữ lập trình hoàn thành khi người dùng có thể thực hiện bất kỳ thuật toán nào với nó.

Những gì để mong đợi

Khả năng tái sử dụng công thức: Một trong những thách thức khi làm việc với các công thức trong ngôn ngữ lập trình Excel thông thường là chúng thường rất phức tạp. Khi các công thức phức tạp này được tái sử dụng nhiều lần trong suốt tờ giấy, chủ yếu có hai loại rào cản:: One of the challenges in working with formulas in conventional Excel programming language is they are often very complex. When these complex formulas are reused repeatedly throughout the sheet, there are mainly two types of roadblocks:

  • Nếu có một lỗi trong logic, lập trình sẽ cần quay lại và cập nhật nó ở mọi nơi. Rủi ro khuếch đại khi các công thức được sử dụng rất phức tạp - nhường chỗ cho lỗi của con người lớn hơn.
  • Thứ hai, đối với một lập trình viên không phải là tác giả ban đầu, thật khó để hiểu được ý định của một công thức nhất định. & NBSP;

Bất kỳ công thức nào được xây dựng trong Excel đều có thể được bọc trong hàm Lambda và được sử dụng ở bất cứ đâu trong toàn bộ trang tính.

Ký kết: Các công thức Excel không thể lặp (lặp lại trên một tập hợp logic trong các khoảng thời gian xác định). Người dùng thường định cấu hình khoảng thời gian theo cách thủ công. Tuy nhiên, với tập hợp các ký tự mà chúng tôi làm việc cùng không tĩnh, cách thủ công không phải lúc nào cũng phù hợp và có thể dẫn đến sự phức tạp và lỗi thêm. Tuy nhiên, với Lambda, người dùng có thể tạo một chức năng gọi là ReplaceChars. Nó tự tham khảo và cho phép người dùng lặp lại thông qua danh sách các ký tự được xóa.: Excel formulas cannot loop (repeat over a set of logic within defined intervals). Users generally configure the time interval manually. However, given the set of characters we work with are not static, the manual way is not always suitable and may lead to added complexity and errors. However, with LAMBDA, users can create a function called REPLACECHARS. It references itself and allows the user to iterate through the list of characters to be removed.

Các loại dữ liệu khác nhau: Đây là một cải tiến chung, nhưng Excel, qua nhiều năm, đã giới thiệu các loại dữ liệu mới có thể được làm việc. Nó bao gồm các mảng động để truyền các giá trị và chức năng; và bao gồm các loại dữ liệu phong phú khác cho các giá trị được lưu trữ trong một ô.: This is a general improvement, but Excel, over the years, has introduced new types of data that can be worked with. It includes dynamic arrays for passing values and functions; and inclusion of other rich data types for values stored in a cell.

Gói lên

Trong tương lai, Microsoft Excel sẽ có các mảng có thể làm tổ và triển khai các bộ kết hợp xử lý mảng, coi các chức năng của Lambda làm đối số của họ.

Microsoft cũng có kế hoạch xác định các chức năng thông qua các chức năng được xác định bằng bảng. Có nghĩa là, người dùng sẽ có thể xác định các chức năng lớn hơn bằng cách sử dụng nhiều công thức trải rộng trên các ô.

Key Takeaways

  • Nhóm Excel đã công bố Lambda, một tính năng Excel mới cho phép người dùng xác định và đặt tên các chức năng công thức tùy chỉnh hoạt động như các hàm Excel Standard Excel tiêu chuẩn
  • Các chức năng Lambda tùy chỉnh thừa nhận các tham số, có thể gọi các hàm Lambda khác và tự gọi mình là
  • Với Lambda, ngôn ngữ công thức Excel hoàn thành. Do đó, các chức năng do người dùng xác định có thể tính toán bất cứ điều gì mà không cần dùng đến các ngôn ngữ bắt buộc (ví dụ: VBA, JavaScript)
  • Nhóm Microsoft cũng đang thử nghiệm suy luận loại và chiều được kích hoạt bởi máy học. & NBSP;
  • Tính năng mới đã sẵn sàng để đơn giản hóa đáng kể các công thức cho cả người dùng quyền lực và Excel thông thường. Tuy nhiên, có thể mất thời gian để cộng đồng nhận ra tiềm năng đầy đủ của Lambda. & nbsp;
     

Brian Jones, người đứng đầu sản phẩm của Excel, gần đây đã công bố Lambda, một khả năng mới được thêm vào ngôn ngữ công thức Excel. Lambda cho phép người dùng xác định các chức năng tùy chỉnh bằng ngôn ngữ công thức Excel, thay vì JavaScript hoặc VBA.

Với việc bổ sung các chức năng tùy chỉnh có thể gọi nhau và tự gọi mình, ngôn ngữ công thức Excel, trở nên hoàn chỉnh, có nghĩa là người dùng Excel có thể tính toán bất cứ điều gì mà không cần dùng đến ngôn ngữ lập trình khác. Cộng đồng Excel đã bắt đầu đưa tính năng này vào sử dụng.

Simon Peyton Jones, một người đóng góp chính cho ngôn ngữ lập trình chức năng Haskell và nhà nghiên cứu tại Microsoft Research, lưu ý rằng ngôn ngữ công thức Excel có thể là ngôn ngữ lập trình chức năng phổ biến nhất được sử dụng trên thế giới.

Trong một bài thuyết trình từ nhóm tình báo Calc, Jones đã giải thích lý do đằng sau sự phát triển mới của ngôn ngữ công thức Excel, như sau:

Khi tôi lần đầu tiên gia nhập Microsoft 22 năm trước, câu hỏi đầu tiên của tôi là làm thế nào một nhà nghiên cứu lập trình chức năng có thể tạo ra ảnh hưởng tại Microsoft? Vì vậy, tôi sớm không tham gia vào Excel vì ngôn ngữ công thức Excel, chính xác là một ngôn ngữ lập trình hoàn toàn chức năng. Hơn nữa, nó được sử dụng rộng rãi hơn bất kỳ ngôn ngữ lập trình nào khác trên hành tinh. [Tuy nhiên,] Ngôn ngữ công thức Excel, được coi là ngôn ngữ lập trình, bị hạn chế khủng khiếp. [...] Bạn có thể xác định các chức năng mới. Bạn chỉ có thể viết các công thức gọi các chức năng 600 tích hợp hiện có là một phần của Excel. Tôi không thực sự đếm việc viết các chức năng mới trong JavaScript ở đây vì người dùng cuối chỉ có thể làm điều đó.
[...]
You can’t define new functions. You can only write formulas that call the existing built-in 600 functions that are part of Excel. I don’t really count writing new functions in JavaScript here because end users just can’t do that.

    Nội dung được tài trợ liên quan

Jones đã đề cập rằng những ý tưởng cuối cùng dẫn đến việc thực hiện Lambda ngày từ đầu những năm 2000. Lambda thêm vào bảng tính Excel Cơ chế cơ bản nhất mà các lập trình viên sử dụng để kiểm soát sự phức tạp: khả năng xác định các trừu tượng có thể tái sử dụng.

Hàm Lambda do người dùng xác định có thể là một đối số cho một lambda khác hoặc kết quả của nó; Lambdas có thể trả lại Lambdas; Lambdas có thể được đặt tên và tự gọi mình.

Với việc bổ sung Lambda, ngôn ngữ công thức Excel trở nên hoàn chỉnh, điều đó có nghĩa là người dùng Excel có thể thực hiện bất kỳ tính toán nào với các hàm Lambda Excel.

Microsoft Research cung cấp ví dụ sau đây về các chức năng Lambda hợp tác để đảo ngược một chuỗi:

Hướng dẫn is excel turing-complete - excel turing-hoàn thành

(Nguồn: Blog nghiên cứu của Microsoft)

Ví dụ trước cho thấy ba lambdas (HEAD, TAILREVERSE) với REVERSE tự gọi mình là đệ quy và sử dụng HEADTAIL cho tính toán của nó. Đối với mục đích so sánh, một hàm đảo ngược một chuỗi có thể được viết bằng ngôn ngữ hoàn toàn chức năng Haskell như sau:

reverse_str s = case s of "" -> s
                        c:cs -> reverse_str cs ++ [c]

c:cs Hiệu quả mô hình khớp c với đầu (ký tự đầu tiên) của chuỗi, với

=LAMBDA(textString, illegalChars,
   IF(illegalChars=””, textstring,
     REPLACECHARS(
       SUBSTITUTE(textString, LEFT(illegalChars, 1), “”),
       RIGHT(illegalChars, LEN(illegalChars)-1)
      )
    )
)
0 là đuôi (phần còn lại của các ký tự).

Các hàm Lambda Excel có thể được xác định với chức năng Lambda như trong công thức sau, thực hiện hàm

=LAMBDA(textString, illegalChars,
   IF(illegalChars=””, textstring,
     REPLACECHARS(
       SUBSTITUTE(textString, LEFT(illegalChars, 1), “”),
       RIGHT(illegalChars, LEN(illegalChars)-1)
      )
    )
)
1:

Hướng dẫn is excel turing-complete - excel turing-hoàn thành

(Nguồn: Bài viết hỗ trợ Microsoft)

Lambdas có thể được đặt tên với Trình quản lý tên tích hợp Excel, giúp chúng dễ dàng sử dụng lại ở các phần khác của bảng tính. Minh họa trước đây giả định rằng Lambda đã được đặt tên là

=LAMBDA(textString, illegalChars,
   IF(illegalChars=””, textstring,
     REPLACECHARS(
       SUBSTITUTE(textString, LEFT(illegalChars, 1), “”),
       RIGHT(illegalChars, LEN(illegalChars)-1)
      )
    )
)
2 trước khi sử dụng.

Microsoft cung cấp rất nhiều ví dụ về Lambda trong bài đăng và tài liệu thông báo của Lambda. Chức năng Lambda sau đây thay thế các ký tự bị cấm trong một chuỗi:

=LAMBDA(textString, illegalChars,
   IF(illegalChars=””, textstring,
     REPLACECHARS(
       SUBSTITUTE(textString, LEFT(illegalChars, 1), “”),
       RIGHT(illegalChars, LEN(illegalChars)-1)
      )
    )
)

Đề cập đến ví dụ trước, một chuyên gia Excel cho biết:

Trước đây, bạn sẽ phải sử dụng một chức năng để loại bỏ các ký tự bất hợp pháp một lần. Điều này có thể trở nên rất phức tạp bởi vì bạn không phải lúc nào cũng có cùng số lượng ký tự bất hợp pháp được xóa trong mỗi chuỗi và nó sẽ cần sử dụng cẩn thận các chức năng để ngăn chặn lỗi xảy ra.

Sau khi phát hành Lambda vào tháng 12 năm 2020, cộng đồng Excel cũng đã làm việc để tạo ra các ví dụ về các chức năng Lambda.

Do đó, Lambda giúp người dùng Excel dễ dàng hơn - phần lớn trong số đó không phải là lập trình viên, để trừu tượng các chức năng thường được sử dụng đằng sau một công thức được đặt tên. Các lựa chọn thay thế bao gồm toàn bộ công thức sao chép trong các ô. Thực tiễn thường tạo ra các công thức rất lớn, khó đọc, khó duy trì và đã được biết là tạo ra các lỗi có thể không bị phát hiện trong một thời gian dài.

Là ngôn ngữ lập trình, ngôn ngữ công thức Excel được hưởng lợi từ ứng dụng Excel (được sử dụng làm IDE), vòng phản hồi ngay lập tức của nó (đạt được với các sân chơi tương tác, thay thế hoặc thay thế mô -đun nóng trong các ngôn ngữ khác) và mô hình lập trình DataFlow của nó.

Tuy nhiên, Excel, với tư cách là một ứng dụng mã thấp, có thể đã đầu tư vào việc hỗ trợ các ứng dụng người dùng lớn. Mặc dù tính mô -đun và trừu tượng, các yếu tố chính của phát triển ở quy mô, có thể đã được cải thiện với Lambda, thử nghiệm tự động, hợp đồng và gõ, các tính năng chính ảnh hưởng tích cực đến sự mạnh mẽ, chủ yếu bị thiếu, để lại nhiều chỗ cho lỗi của con người. Ray Panko, giáo sư tại Đại học Hawaii, đã đánh giá rằng, trung bình, 88% bảng tính Excel có lỗi 1% trở lên trong công thức của họ. Cassotis Consulting nhận xét về kết quả nghiên cứu như sau:

Tần suất của các lỗi được tạo ra trong khi phát triển bảng tính tương tự như sự phát triển của mã lập trình. Tuy nhiên, sau này trải qua nhiều thử nghiệm và quy trình xác nhận trước khi chúng được sử dụng chính thức, trong khi hầu hết các bảng tính được sử dụng ngay sau khi bản nháp đầu tiên được phát triển.

Như Doug Hudgeon, Giám đốc điều hành của các chức năng được quản lý, đã giải thích cho InfoQ trong một bài viết đề cập đến các nền tảng mã thấp:

Các nhà phát triển cộng đồng tạo ra hai loại rủi ro. Đầu tiên, rủi ro tích hợp, liên quan đến việc phơi bày dữ liệu không nên phơi bày. Và thứ hai, rủi ro chuyển đổi, liên quan đến lỗi hoặc tính toán sai trong ứng dụng dẫn đến các quyết định kinh doanh tồi.

Các tế bào được đánh máy có thể làm giảm rủi ro chuyển đổi và tránh được khoản lỗ € 750k được quy cho một quỹ được đánh dấu sai trên bảng tính là một quỹ Euro thay vì là một quỹ đô la. Cơ quan Quản lý Kho bạc Quốc gia (NTMA), đã mua quỹ, giải thích:

Sau đó, khi lỗi được phát hiện, tỷ giá hối đoái đã chuyển so với NTMA và lợi nhuận đầu tư đã giảm 750.000 €.

Về việc đánh máy, nhóm sản phẩm Excel đã mở rộng các loại mà Excel hiểu. Nhóm cũng thử nghiệm với suy luận kiểu và chiều dựa trên logic, được hỗ trợ bởi học máy.

Hỗ trợ tạo, phiên bản, xuất bản, nhập khẩu và gỡ lỗi có thể cần phải cải thiện. Jones báo hiệu những cải tiến trong tương lai để tạo công thức:

Một điều mà tôi có thể nói với bạn rằng tôi nhận được tôi mỗi lần là trải nghiệm chỉnh sửa trong người quản lý tên ... chắc chắn rất nhiều chỗ để cải thiện ở đó.

Nhóm Microsoft cũng hoạt động trên các chức năng được xác định theo bảng, cho phép người dùng xác định các tham số và đầu ra của các hàm là ô bảng tính. Advait Sarkar, một nhà nghiên cứu cao cấp trong nhóm tình báo calc, đã giới thiệu cách các chức năng được xác định theo tấm đơn giản hóa trải nghiệm tạo ra các chức năng. Các bảng tính được sử dụng để chứa các chức năng được xác định bằng tấm cũng có thể được sử dụng để lưu trữ các thử nghiệm ghi lại các giai đoạn chức năng hoặc sự cố của một tính toán phức tạp trong các ô linh tinh. Với sự trừu tượng được cung cấp bởi Lambda, người ta thậm chí có thể mơ về một thư viện các trình tạo giá trị hỗ trợ kiểm tra các công thức với thử nghiệm dựa trên tài sản, như lớp tùy ý được sử dụng bởi công cụ thử nghiệm dựa trên tài sản của Haskell.

Ngôn ngữ công thức Excel phát triển về khả năng cũng có nghĩa là nó đang phát triển trong sự phức tạp. Jones tuy nhiên lưu ý:

Ngay cả khi nó cần kỹ năng và kiến ​​thức lớn hơn cho tác giả một Lambda, thì không cần thêm kỹ năng nào để gọi nó. Lambda cho phép các tác giả lành nghề mở rộng Excel với các chức năng dành riêng cho miền ứng dụng xuất hiện một phần hoàn hảo của Excel cho các đồng nghiệp của họ, những người chỉ đơn giản gọi họ.

Nhóm nghiên cứu báo cáo phản hồi người dùng sơ bộ tích cực. Một người dùng đã báo cáo:

Excel đã có cơ hội đóng gói các tính toán lặp đi lặp lại như các chức năng Visual Basic. Tuy nhiên, những gì bạn đang đề xuất là rất nhiều để được ưu tiên ... một [lợi thế] là hiệu suất; Các chức năng VB có thể khá chậm. [...] Các chức năng VB phá vỡ đường kiểm toán; Không phải tất cả hành vi của họ được xác định bởi các tham số của chúng, vì họ có thể lấy dữ liệu từ các ô khác ngoài thông qua danh sách tham số. Gỡ lỗi chức năng VB đòi hỏi kỹ năng lập trình; Của bạn đòi hỏi nhiều kỹ năng bảng tính tiêu chuẩn hơn.

Người dùng khác có thể không nhìn thấy điểm. Mike James, tác giả của Hướng dẫn lập trình lập trình viên, đã phản đối:

Vì vậy, nếu bạn không đủ sáng để hiểu tính toán Lambda, bạn chỉ có thể sử dụng nó như một con vượn ngu ngốc ... tất cả chúng ta đều biết nơi đó kết thúc. Bảng tính đủ nguy hiểm mà không làm cho chúng siêu nguy hiểm bằng cách che giấu học tập. [...] Những gì chúng ta có ở đây là một sự tò mò học thuật - một vật trang trí hoặc đồ chơi bàn. Nó có thể giải thích một số người đủ thông minh để nhận ra một lambda khi họ nhìn thấy nó, nhưng nó đang lan truyền nó là không.
[...]
What we have here is an academic curiosity - a desk ornament or toy. It might amuse some people clever enough to recognize a lambda when they see it, but down-earth-spreadsheeting it isn’t.

Trong mọi trường hợp, Excel Lambdas chỉ ra ngoài và cách chúng sẽ được cộng đồng Excel sử dụng cuối cùng sẽ quyết định tính hữu dụng thực tế của nó. Các chuyên gia lập trình có thể, ví dụ, thực hiện DSL với trình phân tích cú pháp và phiên dịch được thể hiện là lambdas. Sau đó, người dùng doanh nghiệp có thể sử dụng các DSL đó để đạt được mục đích kinh doanh của họ với khả năng giảm các lỗi ngoài ý muốn, báo cáo lỗi tốt hơn - và sự thân thiện, phản hồi ngay lập tức về môi trường Excel. Người dùng trung gian có thể mở rộng DSL mà không cần tham gia vào ngôn ngữ lập trình thực tế như VBA hoặc JavaScript, có tích hợp với Excel thêm các vấn đề bảo mật.

Mặc dù các chức năng Lambda có thể bị lạm dụng theo những cách vẫn được hiểu, và một lớp lỗi mới đã sẵn sàng để xem ánh sáng nếu không có sự quan tâm, tính năng này cũng có thể đơn giản hóa các công thức đã tồn tại và các bảng tính mới, do đó làm giảm tiềm năng cho những sai lầm cơ bản. Giống như trong các ngôn ngữ lập trình khác, các lỗi được sinh ra từ mã thực tế một cách mù quáng (công thức) sẽ tiếp tục xảy ra. Tuy nhiên, chúng có thể ít bề mặt hơn cho các lỗi nếu các công thức bị thu hẹp, thông qua việc tái sử dụng các trừu tượng Lambda do người dùng xác định đúng.

Cuối cùng, bảng tính đã trở nên mạnh mẽ hơn đối với phần lớn người dùng. Như Jonathan Edwards đã nói:

Sự đơn giản và tiện ích của bảng tính đặt lập trình cho sự xấu hổ. Chúng tôi tin rằng sức mạnh của bảng tính là chúng cung cấp một chất nền tính toán: một mã tạo tác tự trị kết hợp mã và dữ liệu liên tục được trình bày thông qua một phép ẩn dụ không gian đơn giản.

Người dùng quan tâm đến việc thử Lambda có thể tham gia chương trình Office Insider và chọn kênh Beta để truy cập sớm. Phản hồi và đề xuất được hoan nghênh và có thể được đăng trong chương trình hoặc trên Diễn đàn Cộng đồng Công nghệ Excel.

Thông tin về các Tác giả

Bruno Couriol có bằng Thạc sĩ Viễn thông, bằng Cử nhân Toán học và MBA của INSEAD. Bắt đầu với giọng nói, hầu hết sự nghiệp của anh ấy đã được sử dụng như một nhà tư vấn, giúp các công ty lớn giải quyết các vấn đề chiến lược, tổ chức và kỹ thuật quan trọng của họ. Trong vài năm qua, ông đã tập trung vào sự giao thoa giữa kinh doanh, công nghệ và tinh thần kinh doanh.holds a Msc in Telecommunications, a BsC in Mathematics and a MBA by INSEAD. Starting with Accenture, most of his career has been spent as a consultant, helping large companies addressing their critical strategical, organizational and technical issues. In the last few years, he developed a focus on the intersection of business, technology and entrepreneurship.