Dường như có một niềm tin đã tồn tại từ lâu (chủ yếu là bởi những người không nói dối) rằng lisp tốt hơn hầu hết các ngôn ngữ tại AI.
Niềm tin này bắt nguồn từ đâu? Và có bất kỳ cơ sở trong thực tế cho nó?
Dường như có một niềm tin đã tồn tại từ lâu (chủ yếu là bởi những người không nói dối) rằng lisp tốt hơn hầu hết các ngôn ngữ tại AI.
Niềm tin này bắt nguồn từ đâu? Và có bất kỳ cơ sở trong thực tế cho nó?
Câu trả lời:
Một trong những khác biệt chính giữa các ngôn ngữ giống LISP và các ngôn ngữ khác là trong LISP, mã và dữ liệu là cùng một thứ. Điều này cho phép thực hiện những việc như chương trình sửa đổi một số thuật toán của nó trong thời gian chạy vì nó "học" những điều mới, như một phần bản địa của ngôn ngữ.
Một khía cạnh khác đi sâu vào vấn đề này, mặc dù không nhiều, là khả năng của LISP để dễ dàng thêm ngữ nghĩa ngôn ngữ mới thông qua các macro. Điều này cho phép thực sự đi vào và xác định DSL mà AI của bạn hoạt động và có thể phát triển, với tiềm năng cho ngôn ngữ đó phát triển, tự sửa lỗi và phát triển trong khi AI đang chạy.
Đồng ý với Quadres Age, lịch sử sử dụng LISP đi một chặng đường dài hướng tới hình ảnh LISP rằng nó tốt cho AI. Tại sao LISP được sử dụng cho AI bao gồm lịch sử chi tiết hơn nhiều.
Một số chương trình đầu tiên trong lisp là các định lý lý thuyết, toán học tượng trưng, ELIZA cổ điển, v.v. Ngoài những cuốn sách như PAIP của Peter Norvig, cũng như thực tế là lisp bắt nguồn từ phòng thí nghiệm AI của MIT, nó có hình ảnh đó điều đó là tốt cho AI.
DARPA cũng tài trợ cho các trường đại học nghiên cứu về AI và mua số lượng phần cứng đáng kể từ Symbolics. Sự thiếu hụt tiền cuối cùng đã dẫn đến cái gọi là "mùa đông AI".
Cuối cùng, các ngôn ngữ gốc như Fortran (hay "ngôn ngữ" như ASM) đã được sử dụng chính cho điện toán số. Bạn đã làm việc với các số và mảng của chúng. Ngày nay chúng ta có các biểu tượng hoặc khả năng tạo ra hầu hết mọi đối tượng chúng ta muốn, trong hầu hết các ngôn ngữ hiện đại.
Vì vậy, lý do lisp đã tốt hơn cho AI tại một thời điểm không còn là vấn đề nữa. Tuy nhiên, ý tưởng cho rằng "lisp là tốt cho AI" vẫn còn tồn tại.
Có hay không lisp là một ngôn ngữ tốt hơn bởi vì các tính năng và cấu trúc của nó hoàn toàn là một trường hợp khác (vì thực sự loại này áp dụng cho nhiều lĩnh vực khác ngoài AI, và thường sẽ dẫn đến chiến tranh ngọn lửa của bạn).
Chúng ta hãy xem xét một số chương trình AI hiện tại: (1) Robot, ví dụ như xe tự lái. Trong thử thách lớn của DARPA, phần mềm lái xe ô tô vượt trội không phải là Lisp. Thay vào đó, nó là một ngôn ngữ thủ tục như C ++ hoặc Java. (2) Máy dịch ngôn ngữ tự nhiên. Lisp không được sử dụng cho mục đích này bởi các hệ thống sản xuất được sử dụng rộng rãi. (3) Chơi trò chơi, ví dụ như các chương trình cờ vua. Lisp không được sử dụng cho mục đích này bởi các chương trình cờ vua ưu việt, được sử dụng rộng rãi như Fritz.
Lisp được phát minh và phát triển bởi các phòng thí nghiệm AI của Hoa Kỳ vào những năm 1960 để nhanh chóng tạo ra các chương trình logic biểu tượng trong đó các cấu trúc dữ liệu Lisp bản địa phù hợp với mức độ trừu tượng cần thiết - ví dụ: các từ tiếng Anh có thể là biểu tượng trong danh sách, các công thức logic có thể dễ dàng đại diện như danh sách các toán tử và toán hạng.
Nhưng đối với các chương trình sản xuất, lợi thế kỹ thuật phần mềm của các ngôn ngữ gõ tĩnh và nhiều thư viện bên thứ ba, có nghĩa là Lisp thậm chí không được xem xét cho các hệ thống hiện đại lớn thực hiện các tác vụ AI.
@Stephen Sậy nói rất hay. Tôi chỉ có thể thêm rằng tôi đã ở MIT AI Lab vào những năm 70. Tôi đã nghe một câu chuyện sau đó về nguồn gốc của Lisp. Tôi không thể thề đó là sự thật, nhưng nó như thế này:
John McCarthy đã ở MIT vào những năm 50, và anh ta đã làm việc để chứng minh các thuộc tính của các chương trình, và vì điều này, anh ta đã sử dụng một cú pháp đơn giản tương tự như Lambda Tính.
Câu chuyện là một trong những học sinh tốt nghiệp muốn thực hiện một dự án (tương tự, hoặc chứng minh định lý, hoặc toán học tượng trưng, tôi không nhớ đó) và hỏi McCarthy nên sử dụng ngôn ngữ nào. Câu trả lời - Tất nhiên là Fortran. (Không có nhiều thứ khác, và bản thân việc xử lý danh sách khá nổi tiếng, nhưng chỉ là các gói chương trình con, không phải là ngôn ngữ.) Vâng, bằng cách nào đó đã dẫn đến một chương trình xử lý các ký hiệu trong các cấu trúc danh sách lồng nhau. Cùng với một cách để đọc và in chúng, sau đó là một eval
chức năng và Voila '- một ngôn ngữ. Một ngôn ngữ xử lý LISt. Nó cất cánh từ đó.
Đối với loại thuật toán mà chúng ta đang làm trong những ngày đó (và vẫn còn rất ít người đang làm) một ngôn ngữ là cần thiết để có thể dễ dàng thao tác các biểu thức tượng trưng. Đó là những gì Lisp giỏi. Đã có nhiều biến thể về khái niệm cơ bản, đi theo các tên khác nhau, như Prolog, Scheme, v.v.
Vì vậy, AI có nghĩa là nhiều thứ đối với nhiều người và các ngôn ngữ khác nhau tốt cho những thứ khác nhau, nhưng đối với các vấn đề có thể được mô tả là thao túng biểu tượng, thật khó để tìm thấy một ngôn ngữ hữu ích không bằng cách nào đó xuất phát từ Lisp.
Lisp có lợi thế cho những thứ được gọi là AI - ít nhất là logic, tìm kiếm và phân tích những thứ liên quan đến hầu hết AI cho đến khoảng những năm 90.
Một lợi thế lớn của Lisp là hỗ trợ cho các macro - mã dưới dạng dữ liệu, siêu lập trình.
Ví dụ, ML tiêu chuẩn (SML) là một ngôn ngữ khác được sử dụng rộng rãi trong AI, kể từ những năm 80. CAML khách quan và F # là sự phát triển của SML.
Một lợi thế lớn của gia đình ML (và Haskell, v.v.) là khớp mẫu. Điều này có lẽ cũng có sẵn trong Lisp, nhưng thông qua một thư viện siêu lập trình thay vì được tích hợp vào ngôn ngữ. Nó cũng có sẵn trong Haskell, nhưng hiện tại ít nhất, việc khớp mẫu không phổ biến ngoài các ngôn ngữ lập trình chức năng.
Tôi đã thấy các tuyên bố rằng LISP về cơ bản là một phép tính lambda chưa được mở rộng và ML về cơ bản là một phép tính lambda được gõ mở rộng. Tôi không có kiến thức về tính toán lambda đánh máy để nói chắc chắn.
AI cũng đã trở thành một chủ đề rộng lớn hơn nhiều trong những năm qua - đến mức nó gần như đã biến mất hoàn toàn. Khai thác dữ liệu có thể được coi là một trường con của AI. Nhiều thứ AI (OCR, nhận dạng bài giảng) gần như đã ngừng trở thành AI - chúng chỉ là các ứng dụng, giống như bất kỳ ứng dụng nào khác. Và AI phụ thuộc rất nhiều vào xử lý tín hiệu và các loại khủng hoảng số khác so với trước đây.
Đối với OCR và nhận dạng bài giảng, tất nhiên AI luôn phụ thuộc vào xử lý tín hiệu và xử lý số. Vâng, có một số mâu thuẫn trong việc này ;-) Tôi không thể đưa ra trọng số cho những điều mà tôi không thực sự biết.
Dù sao, kết quả là, có lẽ không có một ngôn ngữ nào phù hợp cho cả một ứng dụng AI hiện đại - tôi đoán (không có kiến thức đầu tay) rằng có rất nhiều sự phát triển đa ngôn ngữ trong AI hiện đại. Và tôi gần như có thể đảm bảo rằng bạn sẽ tìm thấy C và C ++ trong một số dự án, để có được hiệu suất khủng. Tôi sẽ không ngạc nhiên nếu có nhiều Python vì những lý do tương tự - với một thư viện số tốt, Python có thể dễ dàng xử lý các tác vụ khủng hoảng số.
Trong một trong những chiếc xe tự lái đó, tôi tưởng tượng hệ thống tầm nhìn được viết bằng một ngôn ngữ khác (và chạy trên phần cứng khác nhau) cho hệ thống quy hoạch tuyến đường.