2008-10-27 8 views
32

He descubierto el error para aprender la programación funcional de verdad. Entonces mi siguiente proyecto de autoaprendizaje es trabajar a través del Structure and Interpretation of Computer Programs. Desafortunadamente, nunca he aprendido Lisp, ya que no era un CS major en la universidad.¿Qué idioma utilizarías para el autoaprendizaje del SICP?

Si bien SICP no enfatiza las herramientas para la programación, hacer los ejercicios implica elegir un lenguaje tipo Lisp para usar. Parece que alguna implementación de Scheme sería la ruta de menos resistencia . Por otro lado, escucho de otros que han usado Common Lisp y Clojure. Me parece que Common Lisp o Clojure serían más propensos a ser utilizados en el código de producción, y por lo tanto un poco mejor para mi currículum. Por cierto, entiendo totalmente el argumento de que aprender un idioma vale la pena por sí mismo, pero aprender un idioma que ayuda a que mi currículum siga siendo un beneficio. Soy un capitalista y un académico sobre mi aprendizaje.

Si tuviera que estudiar SICP, ¿qué idioma escogería y por qué? Idealmente, me gustaría utilizar un lenguaje que pueda ejecutarse en la JVM. Ciertamente puedo trabajar con un lenguaje donde REPL funciona con bash y emacs.

ADICION: ¿alguno de ustedes ha intentado leer SICP sin usar Scheme? Si es así, ¿cómo fue tu experiencia?

Respuesta

40

Utilice el esquema. Es uno de los lenguajes más simples y fáciles que existen, y pasará muy poco tiempo aprendiendo lo suficiente como para entender el SICP. Una vez que comprenda el SICP, verá cómo se aplican los conceptos en cualquier idioma.

3

El código en el libro es Scheme, así que tendrás que leerlo de todos modos, podrías escribirlo también. ¡Tal vez te guste!

22

Use DrScheme. Como han dicho otros, Scheme es un lenguaje simple, y DrScheme es un excelente entorno para usarlo, que tiene mucho soporte y documentación de mediocre a bueno.

+0

Lo descargué anoche y su interfaz de usuario se ve muy fácil de usar. – Alan

+4

Alan, no se olvide de utilizar el soporte de SICP disponible de PLaneT (bibliotecas contribuidas por el usuario para PLT Scheme/DrScheme). http://planet.plt-scheme.org/package-source/neil/sicp.plt/1/13/planet-docs/sicp/index.html – soegaard

+3

DrScheme ahora se conoce como DrRacket http: // en. wikipedia.org/wiki/DrRacket –

2

He descubierto el error para aprender la programación funcional de verdad.

Por lo que he oído, SICP se trata de mucho más que simplemente la programación funcional.

0

pero aprender un idioma que ayuda a mi currículum sigue siendo un beneficio.

debería intentar usar VB6 o COBOL, a continuación, ya que hay una gran cantidad de trabajo de facturación que hay para ello.

+0

Sí, los programadores COBOL seguirán siendo necesarios, pero ... esta es una pregunta sobre la programación funcional no sobre COBOL. – Alan

+1

@ Alan: Supongo que esta respuesta fue hecha como sarcasmo :) – Ovid

2

Advertencia: No he leído el libro entero

Desde los ejemplos se basan en los cierres y las continuaciones, que sería mejor servido mediante el uso de un lenguaje con esos dos características, de lo contrario tendría que ponerlas en práctica tú mismo.

Por ejemplo, escribir un evaluador metacircular en Scheme aprovecha el hecho de que Scheme proporciona cierres y continuaciones.

+1

IIRC, las continuaciones realmente no hacen una aparición prominente en el libro. –

1

He oído hablar de otros que han usado Common Lisp y Clojure.

Debe usar el lenguaje que más le motive, pero el 99% de las personas que trabajan a través del SICP van a utilizar Scheme.

2

que utiliza lua cuando tuve un vistazo a SICP

funciona bastante bien

+0

Estoy tratando de hacerlo también. Sé que Lua carece de continuación completa y macro. ¿Son esas piezas faltantes críticas para el SICP (especialmente en los últimos capítulos)? ¿O hay alguna otra pieza faltante de la que no haya tenido conocimiento? – Middleware

+0

no, en realidad no. Algunas cosas tiene que enfocarse un poco diferente porque la sintaxis es diferente, pero las soluciones a menudo se ven muy similares. –

3

Para obtener el valor real del libro que tendrá que utilizar el esquema. ¿Qué aplicación del sistema depende de su entorno actual:

de Windows - Dr. Scheme (Esquema PLT) - http://download.plt-scheme.org/ Linux - Si se trata de una cuenta remota - puede considerar MzScheme (PLTScheme) (http://download.plt-scheme.org/) de lo contrario querrá use Dr Scheme si esta es una instancia local de Linux.

+0

También agregaría el Esquema MIT a esa lista. Parece que tienen un buen intérprete (si es grande). (bonificación (puntos) (escribió MIT (el libro))) – new123456

3

Creo que Clojure se ajusta perfectamente a lo que quiere hacer. Es mucho más funcional que Scheme porque las estructuras de datos son inmutables y puede ser muy útil ya que se ejecuta en la JVM. Pero tenga en cuenta que terminará aprendiendo Scheme de todos modos para poder entender el código en el libro.

4

Acepto que solo debe usar Scheme. Sin embargo, si realmente tienes ganas de usar Common Lisp o Clojure, elegiría este último. Scheme y Clojure son ambos Lisp-1, por lo que el código en el libro será más congruente entre los dos (excepto para las llamadas finales, pero si comprende cómo compensar, estará bien). Common Lisp es un Lisp-2 y probablemente ocultará la belleza de lo que el SICP está tratando de enseñarte.

+0

Por cierto resolver el problema de optimización de llamadas de cola en Clojure es recurrente: http://clojure.org/special_forms#toc10 (y pedir a Sun que los implemente en la JVM, donde deberían estar) – Pablo

2

Use cualquier cosa que no sea el esquema.

Mientras usa algo más que el esquema, se le alentará a pensar más y evitar la tentación de volver a escribir los ejemplos. Es una buena cosa.

Por supuesto, tiene que ser lo suficientemente similar, en lisp-1 sentido, por lo que clojure y arco son buenos para llevar.

+2

No estoy de acuerdo. Tal vez eso podría ser cierto con otros libros de texto, pero personalmente encontré que los ejercicios del SICP son mucho más que simplemente copiar un ejemplo antes. –

+0

Estoy de acuerdo con nadie. – Tim

+0

Creo que va en ambos sentidos, hay algo que decir sobre el uso de Scheme para permanecer cerca de la fuente, pero cambiar a algo un poco diferente pero con similitudes (otro dialecto lisp) te hace considerar los problemas de diferentes maneras. – Runevault

8

No es una respuesta directa pero espero que esta información sea útil para cualquiera que trabaje a través de SICP. Asegúrese de echar un vistazo a los vídeos aquí:

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

Hay 20 episodios de una hora cada uno. Fueron presentados por Abelson y Sussman en 1986 para los empleados de Hewlett Packard. Los puse en mi iPod y los vi mientras viajaba. Fascinante.

Además, el texto completo del libro está disponible en línea en http://mitpress.mit.edu/sicp/

+0

"... para empleados de Hewlett Packard". Eso explica a todas las personas mayores en el aula. – Bogatyr

4

Como alguien que contrata a la gente, te dirá que tener Esquema en un curriculum vitae es una buena cosa. Tener Scheme, SML, Ocaml o Haskell en su currículum sugiere que usted es un programador muy completo y un gran pensador.

Dicho esto, si está intentando una programación funcional, ¿por qué no Haskell? El esquema es multiparadigm, puede ser OO, Funcitonal, basado en Streams o cualquier otra cosa bajo el sol. Esto hace que sea increíble probar nuevos estilos de programación y paradigmas, pero si su objetivo es estrictamente funcional, puede ser un problema. (Usted terminará escribiendo código no funcional y sin darse cuenta.)

1

Trabajé durante (la mayoría) a principios de este año, y usé Common Lisp, simplemente porque no tenía Scheme disponible (no preguntes).

Como ya se ha señalado, Scheme es un lenguaje Lisp-1, mientras que Common Lisp es un Lisp-2. Hay suficientes diferencias entre los idiomas como para significar que ha pensado cuidadosamente sobre la traducción del código en el libro, por lo que me obligó a realmente entender el material.

2

He utilizado el esquema para mi autoaprendizaje. La mejor manera de aprender de SICP es hacer todos los ejercicios de manera relegiosa.

He usado Gnu guile para el esquema.

0

Creo Esquema sería la opción natural (ya que es el lenguaje "nativo" de SICP)

Sin embargo, ya que el verdadero valor de SICP proviene de los conceptos en lugar de la mecánica de la lengua particular, piense que sería un ejercicio de aprendizaje valioso intentarlo en cualquier lenguaje tipo Lisp. Personalmente probé algunos de los ejercicios en Clojure y todos se traducen bastante bien.

Para aquellos interesados ​​hay un proyecto en curso para crear un Clojure translation of SICP.

1

Si bien podría utilizar algo que no sea Scheme, estaría innecesariamente agregando trabajo adicional y posiblemente evitándose entender completamente de qué se trata el libro. SICP fue un libro introductorio de programación. Es un trampolín hacia temas más profundos en informática. Atascarse en 'traducir' de Scheme a CL o Clojure probablemente oscurecería los puntos más delicados. Sería una pena, porque el SICP es realmente una puerta de entrada para entender de qué se trata realmente la programación.

El esquema de aprendizaje es muy sencillo (especialmente en comparación con CL y Clojure) y, de hecho, tanto el curso introductorio como el libro asumen que el alumno ya no lo sabe. CL y Clojure llevan un equipaje considerable en relación con la tarea en cuestión.

Cuestiones relacionadas