====== CC4101 - Lenguajes de Programación ====== **Material de referencia** * [[http://www.dcc.uchile.cl/~etanter/preplai|PrePLAI]], breve introducción a la programación funcional, Racket, y ''%%#lang play%%'' * [[http://cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-04-26/plai-2007-04-26.pdf|PLAI]] (S. Krishnamurthi) - //capítulos 1 a 14 (para macros, capítulos 35-37)// ({{teaching:cc4101:plai-2007-04-26.pdf|copia local del libro}}) * [[http://www.dcc.uchile.cl/~etanter/ooplai|OOPLAI]], para la parte sobre objetos * {{teaching:cc4101:pl_overview.pdf|PL Overview}}, una ilustración simplista de los elementos claves en la definición e implementación de los lenguajes de programación * [[http://users.dcc.uchile.cl/~etanter/scope/|A Note on Dynamic Scope]], para complementar el PLAI respecto del tema de alcance dinámico * [[https://users.dcc.uchile.cl/~etanter/recursion/|A Note on Recursion]], para complementar el PLAI respecto del tema de la recursión **Material complementario** * [[http://users.dcc.uchile.cl/~etanter/play-interps/|Interpretes del curso]] (''%%#lang play%%'') * [[https://drive.google.com/drive/folders/1--5pINw75WjlfWhDevB7tz8KmTaoAmCC?usp=sharing|slides de las clases]] * [[https://www.youtube.com/playlist?list=PLv3byGkm6N0CvCRaQTB52oazPrvz6PsBe|videos de las clases del 2021/1]] **Referencias adicionales (disponibles en biblioteca FCFM)** * Essentials of Programming Languages (D. Friedman, M. Wand, C. Haynes) * [[http://mitpress.mit.edu/sicp/full-text/book/book.html|Structure and Interpretation of Computer Programs]] (H. Abelson, G. Sussman, J. Sussman) * Sobre Scheme: The Little Schemer (D. Friedman, M. Felleisen) * Sobre Haskell: [[http://learnyouahaskell.com/|Learn You a Haskell]] (excelente libro sobre programación funcional en general, y Haskell en particular) - Ver capítulos 3 y 8 para complementar el PLAI respecto de las clases de tipos en Haskell * Sobre sistemas de tipos: capitulos 24-31 del PLAI, o mucho más exhaustivo, Types and Programming Languages (B. Pierce) ====== Evaluación ====== * 3 tareas * 2 controles * 1 examen La Nota de Control se calculará como el promedio ponderado del examen (50%) y del promedio de los controles (50%). Un alumno que obtenga nota promedio de controles mayor o igual a 5.5 queda automáticamente eximido del examen, pero tiene la opción de rendirlo voluntariamente. La Nota de Tareas se calculará como el promedio de cada tarea. **Importante**: No hay tarea recuperativa La Nota Final es el promedio ponderado de la Nota de Control (50%) y de la Nota de Tareas (50%). **No se permite convalidar tareas o controles de un semestre a otro**. Si reprueba el curso, ya sea por tareas o por controles, tendrá que volver a rendirlo por completo. ====== Reglas Entrega Tareas ====== * Recuerde que su tarea es individual y las copias serán penalizadas con nota 1 (ver política abajo). * No se aceptan atrasos. Sólo tienen a su disposición 7 tokens para días de atraso, para todo el semestre. No se pueden usar más de 3 tokens en una misma tarea. No hay excepciones ni tokens adicionales. Sobre U-Cursos: * La entrega se debe hacer vía U-Cursos hasta las 23:59 del día de entrega de la tarea. * El uso del foro en U-Cursos es altamente recomendado para la discusión del enunciado y resolución de dudas por parte del equipo docente. Si hay alguna modificación sustancial al enunciado en base a discusiones en el foro, se anunciará vía foro en un post nuevo realizado por un miembro del equipo docente actualizando a su vez el enunciado. * La entrega vía U-Cursos debe constar de **un único archivo .zip** (**no** utilizar otro formato de compresión como .rar) que contenga todos los archivos con la implementación solicitada en la tarea y los tests que usó para validar su solución. Asegúrese de leer las instrucciones específicas de entrega en cada enunciado. Reglas específicas: * No puede usar mutación para resolver las tareas, a menos que el enunciado indique lo contrario. * El testing y la calidad de código son considerados en la evaluación. Por cada eje puede aplicarse un descuento de hasta 0.5 puntos a la nota de la tarea, según lo detallado en la [[https://docs.google.com/document/d/1Ahtk97_teZwtpFnJ-H--rLndeiFuyeDHpoGWpC8wL5I/edit?usp=sharing|siguiente rúbrica]]. * El test suite debe estar compuesto por tests propios, cubriendo apropiadamente los casos relevantes. Los tests entregados en los archivos base y/o presentados en el enunciado no son contabilizados. * La calidad de código considera lo siguiente: - Presencia de firmas para las funciones implementadas. - Documentación de comportamientos complejos y relevantes de las funciones. - Respeto de los formatos pedidos en el enunciado para los mensajes de error y otros mensajes impresos hacia el usuario. - Respeto de las interfaces definidas en el enunciado. Una función cumple con la interfaz declarada en la tarea si recibe los mismos argumentos obligatorios y en el mismo orden. Las funciones pueden recibir además argumentos opcionales, si así lo desean. ====== Política sobre Tareas y Copias ====== Las tareas son individuales. Toda entrega deber ser enteramente fruto de su trabajo y no puede ser derivada del trabajo de otros, ya sea de fuentes publicadas como no publicadas, la web, ChatGPT/CoPilot u similar, otro estudiante, libros, materia de otros cursos (incluyendo semestres anteriores de este curso), o cualquier otra persona o programa. Se prohibe copiar, examinar, o alterar la tarea de otra persona, o usar un programa para transcribir, modificar o copiar los archivos de otro alumno. Para facilitar el aprendizaje cooperativo, está autorizado conversar de una tarea con otros estudiantes, siempre y cuando se respete la siguiente política de "pizarra": Una conversación puede tener lugar en una pizarra (o sobre papel, etc.), y debe cumplir las siguientes reglas: * Nadie tiene permiso de tomar notas, grabar la conversación, copiar o fotografiar lo que esté escrito en la pizarra. La pizarra debe borrarse después de la discusión. * Se debe respetar un lapso de cuatro horas después de cualquier conversación antes de empezar a trabajar en la tarea. El hecho de que pueda recrear la solución de memoria se considera como prueba de que se entendió efectivamente. Toda violación podrá ser reportada a las autoridades de la Facultad, solicitando un sumario.