2008-10-27 34 views
32

Tôi đã bắt gặp lỗi để tìm hiểu lập trình chức năng cho thực tế. Vì vậy, dự án tự học tiếp theo của tôi là để làm việc thông qua các Structure and Interpretation of Computer Programs. Thật không may, tôi chưa bao giờ học được Lisp, vì tôi không phải là một chuyên gia CS ở trường đại học.Bạn sẽ sử dụng ngôn ngữ nào cho việc tự học SICP?

Trong khi SICP không nhấn mạnh các công cụ để lập trình, thực hiện các bài tập đòi hỏi phải chọn ngôn ngữ giống như Lisp để sử dụng. Có vẻ như một số triển khai của Scheme sẽ là đường dẫn ít nhất là kháng cự. Mặt khác, tôi nghe thấy những người khác đã sử dụng Common LispClojure. Dường như với tôi rằng Common Lisp hoặc Clojure sẽ là nhiều khả năng được sử dụng trong mã sản xuất hơn, và do đó hơi tốt hơn cho hồ sơ của tôi. BTW, tôi hoàn toàn có được lập luận rằng việc học một ngôn ngữ là đáng giá vì lợi ích riêng của nó, nhưng học một ngôn ngữ mà giúp sơ yếu lý lịch của tôi vẫn là một lợi ích. Tôi là nhà tư bản và học thuật về việc học của tôi.

Nếu bạn phải tự học SICP, bạn sẽ chọn ngôn ngữ nào và tại sao? Lý tưởng nhất, tôi muốn sử dụng một ngôn ngữ có thể chạy trên JVM. Tôi chắc chắn có thể làm việc với một ngôn ngữ mà REPL làm việc với bash và các emacs.

BỔ SUNG: có ai trong số các bạn đã thử đọc SICP mà không sử dụng Đề án không? Nếu vậy, kinh nghiệm của bạn như thế nào?

Trả lời

40

Sử dụng sơ đồ. Nó là một trong những ngôn ngữ đơn giản và dễ nhất trong sự tồn tại, và bạn sẽ dành rất ít thời gian để học đủ để hiểu SICP. Một khi bạn hiểu SICP, bạn sẽ thấy cách các khái niệm áp dụng trong bất kỳ ngôn ngữ nào.

3

Mã trong sách là Sơ đồ, do đó bạn sẽ phải đọc nó - bạn cũng có thể viết nó. Bạn thậm chí có thể thích nó!

22

Sử dụng DrScheme. Như những người khác đã nói, Đề án là một ngôn ngữ đơn giản, và DrScheme là một môi trường tuyệt vời để sử dụng nó, trong đó có rất nhiều tài liệu hỗ trợ và tầm thường-to-tốt.

+0

Đã tải xuống tối qua và giao diện người dùng của nó trông cực kỳ đơn giản để sử dụng. – Alan

+4

Alan, đừng quên sử dụng hỗ trợ SICP có sẵn từ PLaneT (người dùng đóng góp libaries cho PLT Scheme/DrScheme). http://planet.plt-scheme.org/package-source/neil/sicp.plt/1/13/planet-docs/sicp/index.html – soegaard

+3

DrScheme giờ đây được gọi là DrRacket http: // vi. wikipedia.org/wiki/DrRacket –

2

Tôi đã bắt gặp lỗi để tìm hiểu lập trình chức năng cho thực.

Từ những gì tôi đã nghe, SICP không chỉ đơn thuần là lập trình hàm.

0

nhưng việc học một ngôn ngữ giúp hồ sơ của tôi vẫn là một lợi ích.

Bạn nên thử sử dụng VB6 hoặc COBOL, vì có hoạt động thanh toán ngoài đó.

+0

Có lập trình viên COBOL sẽ vẫn cần thiết, nhưng ... đây là câu hỏi về lập trình chức năng không phải về COBOL. – Alan

+1

@Alan: Tôi đoán rằng câu trả lời này có nghĩa là mỉa mai :) – Ovid

2

Caveat: Tôi đã không đọc toàn bộ cuốn sách

Từ những ví dụ dựa trên đóng cửa và continuations, bạn sẽ được phục vụ tốt hơn bằng cách sử dụng một ngôn ngữ với cả những tính năng, nếu không bạn sẽ cần phải thực hiện chúng bản thân bạn.

Ví dụ, viết một bộ đánh giá metacircular trong Đề án thúc đẩy thực tế là Scheme cung cấp các đóng và tiếp tục.

+1

IIRC, sự tiếp tục không thực sự tạo ra một sự xuất hiện nổi bật trong cuốn sách. –

1

Tôi nghe những người khác đã sử dụng Common Lisp và Clojure.

Bạn nên sử dụng bất kỳ ngôn ngữ nào thúc đẩy bạn nhiều nhất, nhưng 99% người làm việc thông qua SICP sẽ sử dụng Đề án.

2

Tôi đã từng lua khi tôi đã có một cái nhìn tại SICP

hoạt động ra khá tốt

+0

Tôi cũng đang cố gắng làm như vậy. Tôi biết Lua thiếu sự tiếp tục đầy đủ và vĩ mô. Là những phần còn thiếu quan trọng đối với SICP (đặc biệt là đối với một số chương cuối)? Hoặc là có bất kỳ phần còn thiếu nào khác mà tôi chưa biết? – Middleware

+0

không, không thực sự. Một số điều bạn phải tiếp cận một chút khác nhau bởi vì cú pháp là khác nhau, nhưng các giải pháp thường trông rất giống nhau. –

3

Để có được giá trị thực hiện của cuốn sách bạn sẽ phải sử dụng Scheme. Mà thực hiện Đề án phụ thuộc vào môi trường hiện tại của bạn:

Windows - Tiến sĩ Scheme (PLT Scheme) - http://download.plt-scheme.org/ Linux - Nếu đây là một tài khoản từ xa - bạn có thể xem xét MZScheme (PLTScheme) (http://download.plt-scheme.org/) nếu không bạn sẽ muốn sử dụng Tiến trình Đề án nếu đây là một phiên bản cục bộ của Linux.

+0

Tôi cũng sẽ thêm Sơ đồ MIT vào danh sách đó. Họ dường như có một thông dịch viên tốt (nếu lớn). (tiền thưởng (điểm) (đã viết MIT (sách))) – new123456

3

Tôi nghĩ Clojure phù hợp với những gì bạn muốn làm một cách hoàn hảo. Nó có chức năng hơn nhiều so với Scheme vì các cấu trúc dữ liệu là không thay đổi và nó có thể rất hữu ích khi nó chạy trên JVM. Tuy nhiên, hãy lưu ý rằng bạn sẽ kết thúc việc học Scheme để có thể hiểu được mã trong cuốn sách.

4

Tôi đồng ý rằng bạn chỉ nên sử dụng Đề án. Tuy nhiên, nếu bạn thực sự có ngứa để sử dụng Common Lisp hoặc Clojure, tôi sẽ chọn cái sau. Đề án và Clojure đều là Lisp-1s, vì vậy mã trong cuốn sách sẽ đồng bộ hơn giữa hai (ngoại trừ các cuộc gọi đuôi, nhưng nếu bạn hiểu làm thế nào để bù đắp bạn sẽ được sử dụng tốt). Lisp phổ biến là một Lisp-2 và có lẽ sẽ che khuất vẻ đẹp của những gì SICP đang cố gắng dạy bạn.

+0

Bằng cách giải quyết vấn đề tối ưu hóa cuộc gọi đuôi trong Clojure là tái diễn: http://clojure.org/special_forms#toc10 (và yêu cầu Sun thực hiện chúng trong JVM, nơi mà họ cần) – Pablo

2

Sử dụng bất kỳ thứ gì ngoài lược đồ.

Trong khi sử dụng một cái gì đó khác sau đó chương trình, bạn sẽ được khuyến khích để suy nghĩ nhiều hơn, và tránh sự cám dỗ để chỉ cần nhập lại các ví dụ. Đó là một điều tốt.

Tất nhiên, nó phải đủ giống nhau, theo nghĩa lisp-1, vì vậy có thể sử dụng đinh tán và vòng cung.

+2

Tôi không đồng ý. Có lẽ điều đó có thể đúng với các sách giáo khoa khác, nhưng cá nhân tôi đã tìm thấy bài tập của SICP nhiều hơn là chỉ đơn giản là sao chép một ví dụ trước đó. –

+0

Tôi đồng ý với không ai. – Tim

+0

Tôi nghĩ rằng nó đi theo cả hai cách, có điều gì đó để nói về việc sử dụng Scheme để gắn bó với nguồn, nhưng chuyển sang một cái gì đó hơi khác nhau nhưng với những điểm tương đồng (một phương ngữ lisp khác) làm cho bạn xem xét vấn đề theo những cách khác nhau. – Runevault

8

Không phải là câu trả lời trực tiếp nhưng tôi cho rằng thông tin này hữu ích cho bất kỳ ai làm việc qua SICP. Hãy chắc chắn để có một cái nhìn tại các đoạn video ở đây:

http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/

Có 20 tập của một giờ mỗi. Họ đã được trình bày bởi Abelson và Sussman vào năm 1986 cho nhân viên Hewlett Packard. Tôi đặt chúng trên iPod của tôi và xem chúng trong khi đi lại. Hấp dẫn.

Ngoài ra, toàn bộ nội dung sách có sẵn trực tuyến tại http://mitpress.mit.edu/sicp/

+0

"... cho nhân viên của Hewlett Packard." Điều đó giải thích tất cả những người già trong lớp học. – Bogatyr

4

Là một người thuê mọi người, tôi sẽ nói cho bạn biết rằng có Đề án trên một sơ yếu lý lịch là một điều tốt. Có Đề án, SML, Ocaml hoặc Haskell về hồ sơ của bạn cho thấy bạn là một lập trình viên rất tốt, và khá một nhà tư tưởng.

Điều đó nói rằng, nếu bạn đang cố gắng lập trình chức năng, tại sao không Haskell thay thế? Đề án là đa nguyên, nó có thể là OO, Funcitonal, Streams based, hoặc bất cứ điều gì khác dưới ánh mặt trời. Điều này làm cho nó tuyệt vời để thử các phong cách lập trình mới và mô hình, nhưng nếu mục tiêu của bạn là đúng chức năng, nó có thể là một vấn đề. (Bạn sẽ kết thúc viết mã không chức năng và không nhận ra nó.)

1

Tôi đã làm việc thông qua (phần lớn) của nó vào đầu năm nay và sử dụng Common Lisp, đơn giản vì tôi không có Đề án (không hỏi).

Như đã lưu ý, Đề án là ngôn ngữ Lisp-1 trong khi Common Lisp là Lisp-2. Có đủ sự khác biệt giữa các ngôn ngữ để có nghĩa là bạn đã suy nghĩ cẩn thận về việc dịch mã trong cuốn sách, vì vậy nó buộc tôi thực sự hiểu thấu tài liệu.

2

Tôi đã sử dụng lược đồ để tự học. Cách tốt nhất để học hỏi từ SICP là thực hiện tất cả các bài tập một cách nhanh chóng.

Tôi đã sử dụng Gnu guile cho lược đồ.

0

Tôi nghĩ rằng Đề án sẽ là sự lựa chọn tự nhiên (vì nó là ngôn ngữ "mẹ đẻ" của SICP)

Tuy nhiên, vì giá trị thực của SICP xuất phát từ khái niệm chứ không phải là cơ chế của ngôn ngữ cụ thể, tôi nghĩ rằng nó sẽ là một bài tập học tập có giá trị để thử nó trong bất kỳ ngôn ngữ giống như Lisp. Cá nhân tôi đã thử một số bài tập ở Clojure và tất cả chúng đều khá tốt.

Đối với những người quan tâm có dự án đang diễn ra để tạo Clojure translation of SICP.

1

Trong khi bạn có thể sử dụng thứ gì đó ngoài Scheme, bạn sẽ không cần phải thêm công việc phụ và có thể tự cắt chính mình khỏi hoàn toàn hiểu những gì cuốn sách nói về. SICP là một cuốn sách lập trình giới thiệu. Nó là một bước đệm cho các chủ đề sâu hơn trong khoa học máy tính. Bị sa lầy trong 'dịch' từ Scheme sang CL hoặc Clojure có lẽ sẽ làm mờ đi những điểm tốt hơn. Đó sẽ là một sự xấu hổ, bởi vì SICP thực sự là một cửa ngõ để hiểu những gì lập trình thực sự là về.

Sơ đồ học tập thực sự thẳng về phía trước (đặc biệt là so với cả CL và Clojure) và, trên thực tế, khóa học giới thiệu cũng như sách, giả định học sinh chưa biết. CL và Clojure mang hành lý đáng kể liên quan đến nhiệm vụ trong tầm tay.