LISP vẫn còn hữu ích trong thế giới ngày nay? Phiên bản nào được sử dụng nhiều nhất?


117

Tôi cố gắng dạy cho mình một ngôn ngữ lập trình mới trong khoảng thời gian đều đặn. Gần đây, tôi đã đọc cách Lisp và các phương ngữ của nó ở phía đối diện hoàn toàn của quang phổ từ các ngôn ngữ như C / C ++, khiến tôi đủ tò mò để biết thêm về nó. Tuy nhiên, có hai điều không rõ ràng với tôi và tôi đang tìm hướng dẫn về chúng:

  1. LISP vẫn được thực hành / sử dụng trong thế giới ngày nay, hay nó là một ngôn ngữ kế thừa như FORTRAN / COBOL? Ý tôi là, ngoài việc duy trì mã hiện có, nó có được sử dụng cho các dự án mới không?

  2. Phương ngữ được sử dụng rộng rãi nhất là gì? Tôi tình cờ thấy Scheme và Common Lisp là hai phương ngữ phổ biến nhất, và muốn ý kiến ​​của bạn là cái nào được ưa chuộng / hữu ích nhất để học - và sẽ vô cùng hài lòng nếu bạn có thể đề xuất bất kỳ tài nguyên nào cho người mới bắt đầu xếp hạng.

Mặc dù mong muốn học một ngôn ngữ khác về cơ bản với các ngôn ngữ thủ tục mà tôi đã từng sử dụng, tôi không muốn đầu tư công sức quá mức vào thứ gì đó nếu nó hoàn toàn lỗi thời - tôi vẫn học nó nếu nó "chết" một cách chuyên nghiệp, nhưng chỉ với một quan điểm học thuật ...


10
Tôi rất quan tâm đến câu hỏi này. Thỉnh thoảng khi tôi có thời gian, tôi quyết định học hỏi về Lisp. Và mỗi khi tôi bị cản trở bởi cùng một loại câu hỏi và sự không chắc chắn mà bạn đang hỏi về đây. Tôi nên học phiên bản nào của Lisp? Có ai (ngoài Paul Graham) thực sự sử dụng Lisp? Tôi có nên học Lisp, hay một trong những ngôn ngữ lập trình chức năng mới hơn như Haskell không? Những lợi ích của Lisp so với Scheme, v.v.
Channel72

3
Chương trình / Chương trình Lisp của MIT: ocw.mit.edu/cifts/electrical-engineering-and-computer-science/ trộm
Joe Internet

Thực tế phổ biến Lisp: gigamonkeys.com/book
Joe Internet

"vẫn"? (Tôi nói đùa!)
jhocking

Tôi vừa tìm thấy chủ đề khác, có liên quan trên SO: stackoverflow.com/q/1614724/212942
TCSGrad

Câu trả lời:


59

Tôi khá thích Scheme, nếu bạn muốn làm việc với JVM, bạn nên kiểm tra Clojure, đây là một lisp được thiết kế để hoạt động trong JVM. Và vâng, Lisp vẫn đáng để học hỏi xem thiết kế tối thiểu như vậy có thể mạnh đến mức nào! Những người tạo ra lisp có một số điều thực sự đúng. Thật đáng ngạc nhiên khi có nhiều tính năng mới tuyệt vời của ngôn ngữ hiện đại không thể có trong những năm 1960!

Đối với sơ đồ nhúng, hãy thử guile: http://www.gnu.org/s/guile/


Có một phương ngữ nào hoạt động tốt với C / C ++ không, vì tôi chủ yếu là một anh chàng C ++? Bạn cũng có thể đề cập đến một số tài nguyên cho một người mới xếp hạng, để bắt đầu học phương ngữ đó?
TCSGrad

10
Những cuốn sách tốt nhất để học chương trình là "The Little Schemer" và "SICP" mitpress.mit.edu/sicp . Có một số triển khai lược đồ có thể được nhúng trong c / c ++, nhưng tôi không thực sự biết cái nào tốt trong những ngày này vì vậy bạn có thể phải thực hiện một số thao tác.
Zachary K

1
Tôi nên chỉ ra rằng chương trình đó rất đơn giản! bạn sẽ học được khoảng 90% ngôn ngữ trong 2 giờ. Tất nhiên điều đó không có nghĩa là bạn sẽ thành thạo nó, chỉ là bạn sẽ biết cú pháp hoạt động như thế nào.
Zachary K

5
@ shan23 Scheme được thiết kế để giảng dạy. Nó chắc chắn có thể được sử dụng để dạy một sinh viên năm nhất cách lập trình để tôi không nghi ngờ gì bạn sẽ không gặp vấn đề gì khi học nó. Nếu bạn muốn tích hợp C hoặc C ++, hãy xem Guile ( en.wikipedia.org/wiki/GNU_Guile ).
Vitor Py

1
Cuốn sách ngôn ngữ lập trình Scheme của Kent Dybvig có lẽ không nổi tiếng lắm, nhưng là một cuốn sách rất hay. plan.com/tspl4 Nếu bạn sử dụng Emacs, thì việc học một số Lisp rất tiện lợi.
blispr

68

Trả lời cho câu hỏi 2, "Phương ngữ được sử dụng rộng rãi nhất":

Phụ thuộc vào cách bạn diễn giải "Được sử dụng rộng rãi nhất." Dưới đây là một số phép toán khăn ăn cho các giới hạn thấp hơn về mức độ sử dụng của mỗi một số phương ngữ được chọn.

Hầu hết các mã thô được viết

  • Có thể Đề án (tất cả các phương ngữ) vì các ứng dụng giáo dục
    • 270 trường ... Hãy đoán 50 sinh viên / năm, 500 dòng mã / sinh viên, 10 năm hoạt động. Hơn 1.000.000 dòng dựa trên toán học khăn ăn.
    • 500.000 dòng vợt trong chính vợt và các công cụ của nó.
  • Có thể Lisp thông thường vì AI và toàn bộ mã nguồn mở và mã sản xuất (Xem mã sản xuất).
  • Có thể là Emacs Lisp vì ...
    • Emacs chính nó: hơn 1.000.000 dòng
    • Số lượng emacs lisp được viết công khai - 237 mô-đun, khoảng 200 dòng / mô-đun là hơn 40.000 dòng chỉ trên EmacsWiki, có lẽ nhiều hơn nữa trong ELPA
    • Cộng với các ứng dụng được viết bằng các tập tin emps Lisp, .emacs, v.v.
  • Clojure
    • Khó ước tính. Chủ yếu là các dotcom nhỏ hơn. Có thể là rất nhiều.

Người chiến thắng: Đề án hoặc Lisp chung. Quá nhiều điều chưa biết.

Mã 'sản xuất' nhất

Người chiến thắng: Tôi đoán Lisp thông thường . Tôi nghĩ rằng chúng ta có thể trả lời "Có" cho câu hỏi 1 dựa trên việc sử dụng Common Lisp và Clojure.

Hầu hết người dùng cuối

  • Lisp thường gặp
    • Khách hàng của ITA Software, bao gồm Orbitz, Bing Travel và kay.com - Có thể là hàng triệu người.
  • Clojure
    • Citigroup (không có chi tiết), Akamai (không có chi tiết), Simple.com, nhiều người khác. Có lẽ là hàng triệu.
  • Kế hoạch
    • Sinh viên CS, nhà nghiên cứu và người có sở thích. Ít hơn một bazillion.
    • Loạt Uncharted - Hơn 5 triệu
  • Emacs Lisp - Chủ yếu là các lập trình viên, chủ yếu trên các nền tảng unix. Có thể là một triệu.

Người chiến thắng: Lược đồ có giới hạn dưới tốt nhất ở đây, vì có số lượng bán hàng trên Uncharted, nhưng nó khá gây tranh cãi.

Phần kết luận

Tóm lại, tôi thấy quả táo lớn đó.


4
Không phải cam nhỏ? Hay chanh tím?
Vatine

Thật vậy, sơ đồ - sơ đồ vợt đặc biệt - dường như là phương ngữ lisp cập nhật nhất. Một công cụ và thư viện cấp chuyên nghiệp.
Bikal Lem

@Bikal Tôi muốn hỗ trợ OpenGL không quá cũ, nhưng sau đó chế độ trực tiếp không phải là lỗi lớn nhất của mã vợt của tôi ...
Jesse Millikan

Không biết rằng Orbitz đã sử dụng CL ... Tôi biết nơi để tìm công việc tiếp theo của mình: D
Rig

2
Rất nhiều hơn 100 nghìn LỘC đã được viết bằng vợt. Thư viện / IDE / công cụ tiêu chuẩn vợt có giá hơn 500 nghìn, cộng với nó được sử dụng trong các công ty như SET, Boeing và Naughty Dog.
Sam Tobin-Hochstadt

43

LISP vẫn được thực hành / sử dụng trong thế giới ngày nay hay đó là ngôn ngữ kế thừa

Vâng, nó là, nhưng bạn phải biết nơi để tìm. Những người sử dụng LISP không có xu hướng hét quá to về nó nhưng có một số ví dụ về một vài công ty khởi nghiệp cao cấp đã sử dụng nó để đạt hiệu quả cao trong 20 năm qua. Nó cũng rất phổ biến với các công ty nhỏ ở châu Âu.

Phương ngữ được sử dụng rộng rãi nhất là gì?

Đây là một câu hỏi hợp lệ, nhưng nó không phải là một câu hỏi dễ trả lời. Nó cũng có thể không phải là một câu trả lời đặc biệt hữu ích: nhiều triển khai có trọng tâm cụ thể vì vậy được lựa chọn tốt nhất nếu chúng phù hợp với vấn đề cụ thể của bạn thay vì dựa trên mức độ được sử dụng rộng rãi. Thay vào đó, tôi sẽ cho bạn biết một chút về các lựa chọn của bạn và bạn có thể tự quyết định.

LISP là một họ ngôn ngữ và mỗi ngôn ngữ đó có một họ phương ngữ và cách triển khai. Phương ngữ rộng rãi rơi vào hai phe "LISP" và "Scheme".

LISP: Cho đến gần đây, LISP chung là vua. Đó là một nỗ lực để thống nhất tất cả các LISP khác nhau và, mà không có ích gì, là "C ++" của LISP. Đó là để nói, đó là một ngôn ngữ LỚN . Nó có mọi thứ. Trong vài năm qua, Clojure đã xuất hiện. Clojure là một LISP chạy trên Máy ảo Java và cố gắng bắt nguồn từ triết lý lập trình chức năng. Theo truyền thống, các LISP khác là đa mô hình. Clojure rất thú vị bởi vì nó nhận được cả LISP và JVM tốt nhất và rất tệ nhất. Vẫn còn rất nhiều tính dài dòng của các ngôn ngữ dựa trên Java và chúng khá tự do và dễ dàng với cú pháp để có nhiều nút và nút cho những thứ khác nhau, nhưng chúng thực sự có một sốnhững ý tưởng thú vị xung quanh các kiểu dữ liệu, đặc biệt là một số cách thực tế mà họ đã nghĩ ra để áp dụng các ý tưởng từ lập trình chức năng.

Các lược đồ: Các lược đồ là một tập hợp con nghiêm ngặt của LISP. Scheme được phát minh bởi Steele và Sussman và trong giai đoạn đầu đời đáng chú ý vì đã được sử dụng trong Khóa học 101 Máy tính MIT. Lược đồ được định nghĩa trong "Báo cáo sửa đổi ^ n về Lược đồ ngôn ngữ thuật toán (RnRS)". Vâng: họ có một trò đùa toán học trong đó. Lược đồ là một ngôn ngữ được tiêu chuẩn hóa theo cách mà các LISP khác không có. Điều này giúp ích rất nhiều cho tính di động giữa các lần triển khai, nhưng nó không phải là viên đạn bạc. Các nỗ lực tiêu chuẩn hóa có xu hướng bảo thủ và đổi mới trong việc triển khai, đặc biệt là xung quanh những thứ như mô-đun, có xu hướng khác nhau. Ngoài ra còn có một loạt các SRFI (Yêu cầu thực hiện Đề án) tương tự như quy trình RFC của IETF. Mọi người sử dụng nó để chuẩn hóa những thứ nhỏ khi cần thiết.

Các lược đồ khác với LISP rằng chúng có một tập hợp các yêu cầu cứng mà chúng phải đáp ứng, một trong số đó là "tối ưu hóa cuộc gọi đuôi" giúp cho việc đệ quy hiệu quả. Do đó, các kiểu lập trình đệ quy phổ biến hơn nhiều trong Đề án so với LISP. Đề án là, cũng không phải là không tốt, như "C" của LISP. Điều đó có nghĩa là, đó là một ngôn ngữ nhỏ và bạn phải có khả năng giữ tất cả ngôn ngữ đó trong đầu.

Hiện tại có hai họ Scheme: Những người dựa trên phiên bản thứ 5 (R5RS) và những người dựa trên phiên bản thứ 6 (R6RS). Độ phức tạp của R6RS lớn hơn bất kỳ phiên bản tiền nhiệm nào và rất nhiều triển khai R5RS đã chọn bỏ qua nó, hy vọng rằng R7RS sẽ giống với R5RS hơn R6RS. Quá trình tiêu chuẩn hóa R7RS hiện đang diễn ra và đã cố gắng bao gồm cả mong muốn của người thực hiện R5RS cũng như của dân gian R6RS bằng cách tiêu chuẩn hóa một ngôn ngữ cơ bản nhỏ trong nhóm làm việc đầu tiên của họ và sau đó đưa vào nhóm làm việc thứ hai để chuẩn hóa các tính năng lớn hơn. Điều này sẽ cho phép ngôn ngữ có các triển khai hiệu quả và hữu ích trên cả phần cứng nhúng nhỏ cũng như các máy có khả năng hơn.

Bây giờ tôi sẽ nói cụ thể hơn:

PicoLisp là một LISP thực sự, thực sự tuyệt vời. Thật nhỏ bé! Đó là tác giả đã viết nó cho chính mình và, theo tôi hiểu, anh ấy đã kiếm sống từ nó từ những năm 1980. Nếu bạn từng có cơ hội tham dự một buổi nói chuyện của anh ấy thì bạn nên làm điều đó: anh ấy thực sự thú vị và thực sự biết công cụ của anh ấy và bạn sẽ không nhận được dù chỉ là một tiếng ngửi nhỏ nhất của bất cứ điều gì chính thống hay nhàm chán.

Tôi không quen với việc triển khai Lisp thông thường nên tôi sẽ không bình luận gì thêm về chúng.

Guile là Đề án GNU chính thức.

Vợt là một sơ đồ R6RS nhưng gần đây nó dường như đã mở rộng mạng lưới và đang cố gắng "phục vụ như một nền tảng để tạo, thiết kế và triển khai ngôn ngữ.".

Gà nhằm mục đích trở thành một Đề án thực tế. Nó dựa trên R5RS và biên dịch xuống C. Điều này hóa ra là một lợi thế thực sự, thực sự, quan trọng vì nó khiến việc sử dụng các thư viện C hiện có trở nên tầm thường. Do đó, Chicken có lẽ là chương trình hữu ích nhất để thay thế Perl, Python, Ruby, v.v., như ngôn ngữ kịch bản hàng ngày của bạn. Có một số người đã sử dụng nó cho tất cả các nhu cầu của họ trong vài năm. Nó có REPL tương tác cũng như trình biên dịch. Cộng đồng (cả trong danh sách gửi thư và IRC) đều hiểu biết, thân thiện và hữu ích.

Tìm kiếm một triển khai với nhiều mô-đun: điều này cho thấy rằng nó có thể sử dụng rộng rãi và có nghĩa là nó có khả năng sẽ có thứ gì đó giúp thực hiện nhiệm vụ trong tay.

Tìm kiếm một triển khai với trình biên dịch hoặc, ít nhất, một cái gì đó không hoàn toàn dựa trên IDE hoặc REPL. Rất nhiều triển khai được thiết kế cho việc dạy học rất khó sử dụng cho kịch bản mục đích chung.

Tôi muốn giới thiệu Gà vì đó là những gì tôi sử dụng. Tôi đã sử dụng nó trong các dự án cá nhân của mình và tôi đã sử dụng nó (và hiện đang sử dụng nó) một cách chuyên nghiệp.

Tôi không muốn đầu tư những nỗ lực không đáng có vào thứ gì đó nếu nó hoàn toàn lỗi thời - tôi vẫn học nó nếu nó "chết" một cách chuyên nghiệp, nhưng chỉ với quan điểm học thuật ...

Lược đồ không chết một cách chuyên nghiệp, nhưng bạn có thể phải đi một số thời gian để sử dụng nó trong bối cảnh đó. Một cái gì đó giống như Gà không chỉ là một mục đích học thuật và nó có thể dễ dàng bao gồm hầu hết tất cả các cơ sở của bất kỳ ngôn ngữ cấp cao nào bạn đang sử dụng.


3
Vợt không phải là một sơ đồ R6RS; có một trong những ngôn ngữ mà bản phân phối vợt cung cấp. Ngôn ngữ vợt thực tế là một Lược đồ khởi hành từ RnRS theo một số cách quan trọng (về việc tôi có cảm xúc lẫn lộn).
JasonFnut

27

Không thể thực sự nói cho tất cả Lisps nhưng Clojure chắc chắn là một ngôn ngữ nóng và phù hợp hiện nay. Một nhóm người dùng London Clojure tôi đã đến đầu tuần này có hơn 100 người tham dự ....

Tôi đã thấy đó là một trải nghiệm tuyệt vời khi học Lisp dưới dạng Clojure trong năm qua (sau rất nhiều kinh nghiệm với Java và C #). Lý do chính cho việc này là:

  • Nó có một sự nhấn mạnh khá lớn vào lập trình chức năng (nhiều hơn so với hầu hết các Lisps khác). Tác giả và BDFL Rich Hickey đã thường xuyên trích dẫn Haskell là một trong những nguồn cảm hứng của ông cho thiết kế ngôn ngữ, điều đó có nghĩa là bạn có được những thứ như cấu trúc dữ liệu hoàn toàn bất biến và các chuỗi vô hạn lười biếng, v.v.
  • Lập trình siêu dữ liệu vĩ mô - triết lý "mã là dữ liệu" của Lisp rất khó hiểu trừ khi bạn thực sự trải nghiệm nó, nhưng đó là một trong những lý do Lisps rất biểu cảm và hiệu quả
  • Hỗ trợ tuyệt vời cho đồng thời đa lõi - Tôi thực sự nghĩ rằng Clojure là ngôn ngữ tốt nhất để lập trình đồng thời ngay bây giờ. Xem http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey để có một bài thuyết trình khai sáng về điều này

Nó dường như cũng là một lựa chọn thực tế cho việc sử dụng sản xuất thực tế vì những lý do sau:

  • Chạy trên JVM với khả năng tương tác Java rất dễ dàng cho phép bạn truy cập vào tất cả các thư viện và công cụ trong hệ sinh thái Java
  • Theo mặc định, đây là một ngôn ngữ động , giúp nó rất thuận tiện cho việc phát triển và tạo mẫu nhanh mà hầu như không có bản soạn sẵn. Tuy nhiên, bạn có thể thêm gợi ý loại tĩnh để có hiệu suất khá tốt ở nơi bạn cần.

Cá nhân tôi biết những người sử dụng Clojure trong một vài ngân hàng đầu tư và khởi nghiệp. Tôi cũng đã chọn Clojure làm ngôn ngữ phát triển chính cho khởi nghiệp của riêng mình, vì vậy tôi sẵn sàng đặt tiền của mình vào nơi: -)


9

Tôi hiện đang học Lisp (và tôi thích nó). Tôi sử dụng Common Lisp nhưng tôi cũng gặp rắc rối với SBCL , Arc (lưu ý, đó là phiên bản Lisp của Paul Graham, như Vitor Braga đã tạo ra Yahoo store / Viaweb) và Allegro CL tương tự như Visual Studio cho Lisp (có thể tạo GUI, tuy nhiên, tôi chưa bao giờ sử dụng nó).

Về việc sử dụng, Lisp đã được sử dụng rất nhiều trong Trí tuệ nhân tạo nhưng tôi sẽ thành thật, tôi không chắc có bao nhiêu cách sử dụng "chung" khác cho Lisp. Rất nhiều trang web được xây dựng ở Lisp ban đầu được viết lại bằng các ngôn ngữ khác nên khó có thể nói rằng nó được sử dụng trong phát triển web (không nói là không, nhưng các trang web lớn hơn sử dụng nó không còn làm được nữa ). Sau khi thực hiện một tìm kiếm nhanh (rất nhanh) đây là danh sách các phần mềm viết bằng Common Lisp từ Wikipedia .

[EDIT] Đối với việc sử dụng Lisp một cách chuyên nghiệp, có những công việc ngoài đó sẽ có bạn sử dụng Lisp. Họ không có nhiều như, nói các công việc Java hoặc C #, nhưng chúng tồn tại. Tôi nghĩ Lisp là một trong những ngôn ngữ được sử dụng cho các ứng dụng nội bộ và có thể mang lại lợi thế cạnh tranh mà các công ty không muốn từ bỏ bằng cách quảng cáo rằng họ sử dụng Lisp. Tôi nhớ đã thấy một bài đăng trên P.SE nói rằng Smalltalk tương tự trong lĩnh vực tài chính.

Ngoài ra, việc có thể cho thấy bạn có thể học các mô hình khác nhau có thể mở ra nhiều cánh cửa hơn ngay cả khi bạn không sử dụng Lisp trong công việc.

"Lisp đáng để học hỏi về trải nghiệm giác ngộ sâu sắc mà bạn sẽ có khi cuối cùng bạn có được nó; trải nghiệm đó sẽ giúp bạn trở thành một lập trình viên tốt hơn trong những ngày còn lại, ngay cả khi bạn không bao giờ thực sự sử dụng chính Lisp." - Eric Raymond, "Làm thế nào để trở thành một hacker"

[/BIÊN TẬP]


7
FWIW, SBCL là một triển khai của Lisp chung và Allegro CL cũng vậy.
Vatine

@Vatine - bạn sẽ đúng. Nếu có một khuôn mặt đỏ mặt tôi sẽ làm cho nó bây giờ. Tôi không biết tại sao tôi cho rằng họ khác nhau. Ngốc cho tôi trình biên dịch khác nhau! = Phương ngữ khác nhau :) Cảm ơn!
Jetti

@Jeff: Chà, cả hai đều mở rộng ngôn ngữ theo các hướng khác nhau, trong khi để "lõi CL" có thể tương tác.
Vatine

@Jetti Bạn đã sử dụng gì ở nơi đầu tiên?
Đánh dấu C

Tôi tin rằng tôi đã sử dụng CLISP, đó là trên một hình ảnh VM mà tôi không còn có. Tôi nghĩ rằng sự thiếu hiểu biết của tôi làm cho tôi tin rằng đó là điều không thể thiếu Ít nhất bây giờ tôi biết rõ hơn.
Jetti

8

Nếu bạn muốn học Lisp ngày hôm nay, tôi sẽ xem một cây vợt, đó là một cách thực hiện sơ đồ nhanh (tốt, nó thực sự đã rời khỏi sơ đồ một chút, vì vậy bây giờ nó là phương ngữ riêng của nó) hoặc clojure, có lợi từ JVM nó chạy trên (vì vậy các thư viện có sẵn, ngoài ra bạn có thể làm cho nó tương tác với mã Java của riêng bạn).

Ngay cả khi bạn không học nó để thực sự sử dụng nó, thì việc học nó vẫn luôn có lợi: bạn học những cách mới để suy nghĩ và xử lý vấn đề, ngay cả trong các ngôn ngữ khác, một khi bạn đã suy nghĩ về Lisp một thời gian.


3
Vấn đề với Scheme là khi bạn bắt đầu có một số thực hành với nó, bạn không muốn quay lại các ngôn ngữ khác. Tôi mới bắt đầu triển khai các luồng (có thể là vô hạn, được đánh giá một cách lười biếng, các chuỗi bất biến) trong C ++ và đó là cách mã nhiều hơn so với trong Đề án! Tôi thực sự ngạc nhiên bởi sự kết hợp giữa sự đơn giản và sức mạnh của Scheme.
Giorgio

++ cho vợt. Nó thực sự là HOÀN TOÀN vô cùng, đó là một trong những bài phê bình của các chương trình khác. Và nó vượt lên trên và vượt ra ngoài những gì chương trình có thể làm liên quan đến việc tạo ngôn ngữ của riêng bạn.
Scott Klarenbach

7

Một phần quan trọng của phụ trợ Amazon từng có ở Lisp nhưng bây giờ đã được viết lại bằng C ++, hoặc tôi đã nghe (tôi phải thừa nhận rằng tôi không có nguồn đáng tin cậy cho việc này).

Yahoo! Cửa hàng là một trong những ví dụ kinh điển của ứng dụng web Lisp. Từ Yahoo! Cửa hàng danh tiếng bạn có thể đã nghe nói về Paul Graham . Graham là một trong những người ủng hộ Lisp nổi tiếng nhất và viết nhiều về chủ đề này. Bạn có thể muốn đọc trang web của anh ấy để biết điểm của anh ấy.

AutoCAD đã từng có một phương ngữ Lisp cho hệ thống macro của nó. Tôi không biết nếu nó vẫn còn.

Đề án là một ngôn ngữ sạch sẽ và rất thanh lịch. Có lẽ đó là ngôn ngữ lập trình yêu thích của tôi nên tôi có thể bị thiên vị. Nếu bây giờ tôi sẽ viết một ứng dụng chính thì có lẽ tôi sẽ viết một ứng dụng bộ xương bằng C, mở rộng và xác định các quy tắc kinh doanh trong Lược đồ. Điều này cho phép tôi sử dụng Scheme và tận dụng C - cho tốc độ và sự sẵn có của các thư viện cho hầu hết mọi thứ.


Những gì bạn muốn giới thiệu như là một cuốn sách / trình biên dịch bắt đầu cho Scheme? Tôi sử dụng Linux, vì vậy nếu có bất kỳ trình soạn thảo nào hữu ích cho người mới, (như Kile dành cho LaTex), hãy cho tôi biết ...
TCSGrad

1
@ shan23 Little Schemer ( ccs.neu.edu/home/matthias/BTLS ) là lựa chọn tốt nhất của bạn. Tôi tin rằng emacs là trình soạn thảo phổ biến nhất cho Scheme nhưng phải mất một thời gian để làm quen với nó.
Vitor Py

1
Trình chỉnh sửa cho lisp, đó là dễ dàng, sử dụng emacs. Nó được viết bởi lisp guys, và in lisp.
Zachary K

Bạn cũng có thể sử dụng IDE vợt ( rquet-lang.org ); nó giống như Emacs nhưng có định dạng tự động và tương tác với trình thông dịch Scheme.
Jeremiah Willcock

Lispbox ( common-lisp.net/project/lispbox ) hoạt động vượt trội (một số kinh nghiệm của emacs rất hữu ích). Nó dựa trên ccl ( ccl.clozure.com ), xem thêm gigamonkeys.com/book/iêu
Giorgio

4

LISP vẫn được thực hành / sử dụng trong thế giới ngày nay, hay nó là một ngôn ngữ kế thừa như FORTRAN / COBOL? Ý tôi là, ngoài việc duy trì mã hiện có, nó có được sử dụng cho các dự án mới không?

Tôi biết một vài người làm Lisps trong một số công ty mới khởi nghiệp ở Thung lũng Silicon và tôi biết rằng Amazon.com đã sử dụng Lisp từ đầu (mặc dù tôi đã nghe nói họ thay thế nó bằng C ++ vì một số lý do?)

Nhưng một công ty để mắt đến là Chó nghịch ngợm . Tất cả các trò chơi của họ được viết bằng một phương ngữ Lisp. Ban đầu, họ tự lăn, nhưng họ sử dụng MZScheme trong loạt Uncharted.

Phương ngữ được sử dụng rộng rãi nhất là gì? Tôi tình cờ thấy Scheme và Common Lisp là hai phương ngữ phổ biến nhất, và muốn ý kiến ​​của bạn là cái nào được ưa chuộng / hữu ích nhất để học - và sẽ vô cùng hài lòng nếu bạn có thể đề xuất bất kỳ tài nguyên nào cho người mới bắt đầu xếp hạng.

Tôi muốn đánh giá rằng Common Lisp, Clojure, Scheme và Emacs Lisp là bốn phương ngữ được sử dụng rộng rãi nhất và trong số đó, tôi nghi ngờ rằng Scheme là phương thức được triển khai phổ biến nhất. Tôi không có bất cứ điều gì để sao lưu điều này, tất nhiên. :)

Tôi khá thích SICP và Little Schemer, như được đề xuất bởi những người khác, nhưng tôi cũng đề xuất Land of Lisp , một cách đọc khá thú vị. :)


Thật vậy, Land of Lisp là một tác phẩm tuyệt vời.
Chiron

@ 4bu3li Bạn không có upvote?
Đánh dấu C

1
Về chú chó nghịch ngợm: Điều đó không hoàn toàn chính xác, các trò chơi trên máy PS3 của chúng được viết bằng GOAL, một ngôn ngữ giống như ngôn ngữ ... Nhưng kể từ khi chuyển sang PS3, chúng đã chuyển sang sử dụng C ++. MZScheme được sử dụng chủ yếu như một bộ tiền xử lý macro, được viết phù hợp với C ++ và được sử dụng để xử lý một số tài sản và một số tập lệnh của chúng được viết bằng S-exps. Nhưng không có mã MZScheme nào thực sự chạy trên PS3.
Arelius

2

Tôi nghĩ nó một phần phụ thuộc vào những gì bạn muốn làm với nó - nếu bạn đang tìm hiểu sâu hơn về các khái niệm khác nhau của lập trình và biến mình thành một lập trình viên giỏi hơn thì tôi sẽ nói rằng nó đáng để học ít nhất là một mô-đun của Lisp. Nếu bạn đang tìm kiếm một ngôn ngữ khác để thêm vào sơ yếu lý lịch của bạn để có được một công việc làm việc với ngôn ngữ này, bạn có thể muốn tìm nơi khác. Không có nhiều công việc Lisp ngoài kia.

Cá nhân tôi đã thử sử dụng SBCL hoặc gần đây hơn, Clojure (và một số Emacs Lisp, nhưng htat vì tôi là người dùng Emacs lâu dài - tôi sẽ cố gắng học Emacs Lisp khi tôi thử học Lisp). Bây giờ tất cả những gì tôi cần làm là tìm thời gian để thực sự chơi với những ngôn ngữ đó ...


1
Đây chủ yếu là lần đầu tiên ... vì điều hiển nhiên là nếu tôi thành công trong việc đó, chắc chắn nó sẽ không làm tổn thương hồ sơ của tôi chút nào :). Nhưng nghiêm túc, tôi muốn có một viễn cảnh về các "phong cách" lập trình khác nhau, để tôi có một ý tưởng hay là sử dụng cái nào trong các tình huống khác nhau (Đừng muốn rơi vào tình huống chỉ được trang bị búa, Tôi phải coi tất cả các vấn đề như móng tay !!)
TCSGrad

2

Tôi không biết rằng có rất nhiều công việc trong LISP, tôi chắc chắn không thể nhìn thấy chúng. Nhưng tôi nhớ một thời gian dài đọc về một số thăm dò của NASA nơi họ đang chạy LISP và có thể chèn mã mới từ trái đất.

Ngoài ra ở New York, nhóm đáp ứng clojure là rất lớn. Tôi đoán rằng nếu bạn quan tâm và đến nhóm gặp gỡ clojure của bạn, bạn có thể tìm thấy cơ hội kết nối và tìm việc làm (không phải công việc clojure mà là những thứ như Java / C ++ / vv.). Nó dường như là hoàn toàn to lớn trong khu vực New York, các khu vực khác có thể thay đổi.

Ngoài ra LISP là một cách nghĩ khác. Ngoài ra, cả LISP và SQL đều dẫn đến việc sử dụng hàng tấn biểu thức lồng nhau. Tôi đã sử dụng SQL một tấn và sau đó nhận thấy LISP có ý nghĩa hơn. Nhưng nếu bạn gặp rắc rối với việc SQL quen với các dấu ngoặc đơn và biểu thức siêu lồng trong khi sử dụng LISP có thể sẽ làm cho các biểu thức SQL dễ dàng hơn nhiều để tìm ra.

Một ví dụ kinh điển là cách triển khai MAX (a, b, c). Bạn có thể tạo một hàm phức tạp với một loạt các câu lệnh if. Hoặc bạn chỉ có thể nói

MAX (MAX (a, b), c)

và sử dụng hai cuộc gọi lồng nhau đơn giản của hai mục MAX, với tôi dễ đọc hơn. Mặc dù nếu hiệu suất là một vấn đề bạn cũng có thể muốn làm theo cách khác, tôi không bận tâm đến việc đếm số lượng so sánh khi sử dụng mỗi phương pháp ... Ngoài ra nếu bạn đang triển khai MAX thông qua macro C hoặc phương pháp khác để đánh giá biểu thức nhiều lần bạn có thể không nhận được kết quả mong đợi vì biểu thức có thể được đánh giá nhiều lần, vì vậy hãy coi chừng các tác dụng phụ ...


3
Bạn thực sự có thể đơn giản hóa MAX bằng cáchMAX(MAX(a b) c)
Andrea

Bạn nói đúng, đó là những gì tôi nhận được khi trả lời ngay sau khi thức dậy. Tôi điều chỉnh câu trả lời.
Cervo

2
Dự án của NASA là Deep Space 1: flownet.com/gat/jpl-lisp.html
Frank Shearar

2

Hai điểm bổ sung:

Đầu tiên, Lisp là một ngôn ngữ tuyệt vời để viết mã trong đó các tương tác giữa các chức năng hoặc dữ liệu thường phức tạp. Trong nhiều ngôn ngữ phổ biến, nếu bạn bối rối về lý do tại sao chương trình của bạn đang làm những gì nó đang làm, bạn phải viết các chức năng đặc biệt để cho phép bạn kiểm tra trạng thái nội bộ của chương trình khi nó diễn ra. Trong một số ngôn ngữ, sau đó bạn phải chờ mã của bạn biên dịch lại. Tất nhiên có thể có các công cụ như trình gỡ lỗi giúp với điều này. Tuy nhiên, trong Lisp, tất cả những gì bạn cần là một cách để dừng chương trình, và sau đó, thông thường, bạn có quyền truy cập vào mọi thứ trong Lisp. Trong Common Lisp, đôi khi tôi chỉ cần gõ ^ C hoặc gọi điện đếnerrorvào một hàm duy nhất (đó là điều duy nhất phải được biên dịch lại và bạn không phải làm gì để biên dịch lại nó). Khi tôi dừng chương trình, tôi ngay lập tức bị ném vào trình gỡ lỗi - nhưng trình gỡ lỗi mang lại cho tôi tất cả sức mạnh của Lisp và tôi có thể thoát khỏi trình gỡ lỗi, gọi các hàm cụ thể, v.v. Tôi có thể dễ dàng kiểm tra bất kỳ cấu trúc dữ liệu nào trong chương trình của tôi. Hầu hết các Đề án nên cho phép thực hành tương tự. Lisp không phải là duy nhất trong vấn đề này, nhưng những gì nó cung cấp vượt xa những gì nhiều ngôn ngữ phổ biến cung cấp.

Thứ hai: Nếu bạn sẽ thử nghiệm với bất kỳ phương ngữ nào của Lisp, tôi sẽ không làm điều đó nếu không có (a) sử dụng trình soạn thảo khớp với dấu ngoặc đơn và (b) học cách thụt lề Lisp thích hợp. Nó cũng là một ý tưởng tốt để sử dụng một trình soạn thảo sẽ gần đúng thụt lề cho bạn. Định dạng mã kiểu C / C ++ / Java được thiết kế cho các ngôn ngữ có ít dấu ngoặc đơn / dấu ngoặc / ngoặc hơn Lisp. Phong cách in ấn đẹp của Lisp hoạt động tốt khi bạn đã quen thuộc với nó và cuối cùng bạn không bị nhầm lẫn bởi dấu ngoặc đơn hoặc lãng phí một nửa không gian của mình khi đặt một dấu ngoặc đơn đóng trên mỗi dòng.


1

Ngay bây giờ tôi có ấn tượng rằng Lisp chủ yếu được sử dụng trong các cửa hàng tư vấn (không phải các cửa hàng tư vấn sử dụng nó chủ yếu).

Nó được coi là một chút outre cho phần mềm thực tế. Chủ yếu là vì mọi người không quen với nó, tôi tin.

Theo truyền thống, Scheme là một phương ngữ khá hàn lâm của Lisp và Common Lisp là phương ngữ công nghiệp.

Lisp đặc biệt hữu ích cho các thao tác tượng trưng và khả năng phản xạ-esque.

Ví dụ, mã tôi đã viết để tìm hiểu Lisp là một chương trình xây dựng các hàm lambda ngẫu nhiên, đánh giá chúng và sau đó vận hành chúng, nhằm giảm thiểu sự khác biệt của hàm với hàm mục tiêu. Tất cả điều đó là thao túng trực tiếp. Trong một ngôn ngữ như C ++ hoặc Java, tôi sẽ phải phát minh ra một đại diện cho các chức năng mà máy tính sẽ thao tác.


Điểm thú vị mà bạn đã đưa ra về sự khác biệt giữa Scheme / Common Lisp - bạn có thể giải thích lý do tại sao / làm thế nào không?
TCSGrad


1

Tôi muốn thêm một số quan điểm về Common Lisp và Scheme. Tôi đã tránh được clojure do JVM, vì vậy tôi không có nhiều quan điểm về nó.

Scheme là một ngôn ngữ ngắn gọn súc tích, được xác định rõ. Phải mất rất nhiều quyết định mà CL phải đưa ra do di sản, và đưa ra cách tiếp cận thuần túy hơn. Chẳng hạn, các biến và hàm nằm trong cùng một không gian tên. Ngôn ngữ mặc định nhỏ hơn và ngắn gọn hơn, hoạt động tốt để dạy cho bạn các loại điều cần thiết, chẳng hạn, nó gây áp lực cho việc sử dụng đệ quy thay vì lặp, vì mặc định nó không có vòng lặp lặp và yêu cầu tối ưu hóa cuộc gọi đuôi . Đề án có một hệ thống vĩ mô vệ sinh rất thú vị, có nhiều giá trị để học tập. Nhưng IMO, trước tiên tôi khuyên bạn nên tìm hiểu các macro không vệ sinh kiểu CL, trong đó hầu hết các phương ngữ (?) Đề xuất cung cấp ít nhất một triển khai, ngay cả khi đó không phải là một phần của thông số kỹ thuật. Vì có vẻ như bạn rất muốn học một ngôn ngữ để học vì tôi

Phải nói rằng, cộng đồng của Scheme bị phân mảnh và ngoài một vài túi nhỏ, dường như chủ yếu dành riêng cho nghiên cứu về việc hoàn thành công việc thực sự ... Ví dụ, mọi phương ngữ đều có trình quản lý gói riêng và các gói thường không di động trên các phương ngữ, đó là một vấn đề lớn trong cộng đồng chương trình.

Mặt khác, Lisp dường như là cách tiếp cận thực tế hơn nhiều để phát triển ngôn ngữ. Tiêu chuẩn là rất nhiều mã lisp có thể di chuyển giữa các lần triển khai, nhiều trình biên dịch nhanh và được tối ưu hóa tốt. Có một bộ lớn các gói, nhiều trong số đó là di động giữa các lần thực hiện. Và dường như một lượng lớn (tương đối) các sản phẩm thực sự đang được tạo ra bằng ngôn ngữ. Và với quicklisp, quản lý gói của nó cảm thấy hợp lý gần với những gì bạn có trong một cộng đồng hiện đại như nói Ruby, hoặc Node. CL, tuy nhiên không phải là không có sai sót, nó có một thông số rất lớn vào thời điểm này so với sơ đồ, và thậm chí đó là hệ thống đối tượng CLOS, một thứ được viết theo truyền thống như một thư viện trong Lisps, là một phần của IIRC thông số kỹ thuật. Và bạn có thể cảm thấy di sản cố thủ thông qua một lượng lớn hệ thống.

Mặt khác, tôi đã nói rằng tôi không thể nói về clojure và Emacs Lisp rõ ràng là lựa chọn phù hợp nếu mục tiêu của bạn là viết các phần mở rộng Emacs, và rõ ràng không phải là lựa chọn thích hợp cho các phần mềm khác.

TLDR; Nếu mục tiêu của bạn là học hỏi, tôi khuyên bạn nên sử dụng Đề án. Tuy nhiên, nếu bạn muốn tạo phần mềm, tôi muốn giới thiệu Lisp chung của hai biến thể chính yếu.


BTW, PLT Vợt là một ngôn ngữ giống như lược đồ hơn, và xuất phát từ cộng đồng lược đồ dường như đang cố gắng hữu ích cho công việc thực tế. Nếu tôi viết mã trong một chương trình những ngày này, thì đó có thể là PLT hoặc Chicken Scheme, nhưng sau đó có thể là do một điểm yếu trong trái tim tôi.
Arelius

0

Tôi đã học được rất nhiều từ các câu trả lời. Cảm ơn tất cả những người đã đóng góp cho cuộc trò chuyện khai sáng này.

Tôi nên đề cập đến newLISP . Mặc dù nó khác một chút so với cả CL và Scheme, nhưng nó thực hiện rất nhiều chức năng rất hữu ích. Tôi thấy máy chủ http, chức năng đa xử lý (Cilk) và các chức năng đánh giá từ xa rất sạch sẽ và dễ sử dụng.

Việc thực thi duy nhất là nhỏ, nhanh và bao gồm rất nhiều pin mát mẻ.


Có lẽ công bằng khi đề cập đến nó nhưng tôi sẽ không đề xuất chính xác ... Không có phạm vi từ vựng và không có mô-đun chẳng hạn - nghiêm túc? Tôi thực sự không hiểu những gì newLISP đang cố gắng thực hiện.
cji

2
Bạn nói đúng - nó khác. Nó sử dụng bối cảnh và phạm vi động và từ các mô-đun kinh nghiệm và bối cảnh của tôi có liên quan đến nhau. Nó không cố gắng trở thành một CL hay Scheme khác. Đọc trang về cách nó khác nhau ( newlisp.org/index.cgi?page=Differences_to_Other_LISPs ) làm sáng tỏ các vấn đề thiết kế. Tương tự như vậy, tôi sẽ không khuyên mọi người muốn có trải nghiệm CL hoặc Scheme. Nhưng đối với một số trường hợp sử dụng, nó có thể là một lựa chọn khả thi. Đó là vẻ đẹp của hệ sinh thái nguồn mở - rất nhiều sự lựa chọn!
CyberFonic

0

Một yếu tố khác để xem xét trong việc lựa chọn phương ngữ nào của Lisp để học có thể là số lượng và chất lượng thực hiện. Nếu một phương ngữ chỉ có một hoặc hai lần triển khai, thì bạn sẽ bị mắc kẹt với các lỗ hổng của chúng cho đến khi các lỗ hổng đó được sửa chữa và luôn có cơ hội mọi người sẽ ngừng tinh chỉnh việc thực hiện. Bản thân nó không phải là lý do để không sử dụng một phương ngữ thực hiện duy nhất của Lisp, nhưng đó là điều cần tính đến. Một lợi thế của Scheme và Common Lisp là có nhiều triển khai các phương ngữ này. Cả hai ngôn ngữ đều đã công bố các tiêu chuẩn, do đó, các triển khai tương đối gần đây có khả năng chạy cùng một mã, chủ yếu. Một số trong những triển khai này đã có từ lâu, nhưng vẫn đang được phát triển tích cực: Hiện tại chúng là các triển khai chất lượng cao và chúng vẫn đang được cải tiến.


Vâng theo đó benchmarks Clojure đang làm không phải là quá xấu so với SBCL: benchmarksgame.alioth.debian.org/u32/...
AndreasScheinert

Cảm ơn Andreas. Bạn đúng. Cho thấy tôi biết bao nhiêu về JVM - không nhiều. Trong phần tôi đã bị ABCL đánh lừa, một CL dựa trên JVM tương đối chậm nhưng khá hay.
Sao Hỏa

Tôi sẽ tranh luận nếu bạn muốn có một Lisp trên JVM, hãy tìm Clojure. Nó không hoàn hảo nhưng đó là một niềm vui thực sự (IMHO)
AndreasScheinert
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.