Unidad II · 4 horas

Elementos fundamentales

Distinguir los elementos fundamentales de los lenguajes de programación, considerando el entorno de desarrollo, su estructura y sintaxis, para utilizarlos en la creación de programas de cómputo.

Subtemas de la unidad

Actividad en clase

Implementa en Python un programa que contenga: (1) una función anidada que ilustre alcance estático (LEGB), (2) una función recursiva con al menos 2 casos base, (3) una función que reciba una lista y modifique tanto por mutación como por reasignación, imprimiendo el resultado en ambos casos para contrastar el efecto observado desde el llamador. Documenta con comentarios qué mecanismo de scope/paso de parámetros se está observando en cada bloque.

Preguntas de reflexión

  1. ¿Qué problemas puede causar el alcance dinámico frente al estático en programas grandes?
  2. ¿Por qué la recursión es central en el paradigma funcional pero opcional en el imperativo?
  3. ¿Qué ventajas y riesgos trae un sistema de tipos con inferencia frente a uno con anotación explícita?
  4. Si Python "pasa por referencia de objeto", ¿por qué incrementar(x) con x = 5 nunca modifica x fuera de la función, sin importar cómo se implemente incrementar?

Lecturas recomendadas

  • Sebesta, R. (2015). Concepts of programming languages (11th ed.), cap. 5 (Nombres, ligaduras, alcance), cap. 6 (Tipos de datos), cap. 9 (Subprogramas), cap. 10 (Implementación de subprogramas). Pearson.
  • Pratt, T., & Zelkowitz, M. (2001). Programming languages: Design and implementation (4th ed.), cap. 3-5. Prentice Hall.
  • Scott, M. (2015). Programming language pragmatics (4th ed.), cap. 3 (Nombres, alcance, binding). Morgan Kaufmann.