Git Product home page Git Product logo

lab01_pdp2021's Introduction

Paradigmas de la programación - 2021

Contenido

Tarea

Un readme breve donde comentan su experiencia y responden las preguntas que están a continuación. Indicar acá si usan otra biblioteca.

Preguntas

Las siguientes preguntas deben ser respondidas correctamente, con el mayor grado de precisión y claridad que puedan.

  1. a) ¿Por qué están separadas las funcionalidades en los módulos indicados? Explicar detalladamente la responsabilidad de cada módulo.

    b) ¿Harían alguna modificación a la partición en módulos dada? Justificar. Advertencia: Si hacen una buena partición, se las chorearemos para el año que viene.

  2. "¿Por qué las funciones básicas no están incluidas en la definición del lenguaje, y en vez es un parámetro del tipo?". Debería decir "¿Por qué las imágenes básicas ...?". Es decir, por qué creen que no se embeben directamente las imágenes, y en vez se utiliza un tipo abstracto.

  3. Explique cómo hace Interp.grid para construir la grilla, explicando cada pedazo de código que interviene.

Respuestas

Respuesta 1. a)

Están seraparadas las funcionalidades en los módulos indicados porque: nos permite que sea más legible y entendible de dónde a dónde cada módulo trabaja.

El dividir los módulos nos permite dividir un problema grande, en problemas más chicos y al ser modulos independientes se puede testear sus funcionalidades por separado. Así nos podemos asegurar que lo que venimos haciendo funciona y no nos afectará lo que se esté realizando actualmente. En el módulo Dibujo.hs se realiza la declaración de la sintaxis de nuestro lenguaje de figuras, definiendo los constructores del tipo Dibujo y las funciones que podremos utilizar con ellas.

Luego el módulo Interp.hs se encarga de realizar la semantica de nuestro lenguaje, dando una interpretación geometrica real utilizando vectores. Finalmente Main.hs es el módulo que nos permite realizar los llamados a otros módulos y configurarlos para realizar los dibujos mediante la librería Gloss.

Respuesta 1. b)

No se nos ocurre otra partición de los módulos.

Respuesta 2

("¿Por qué las imágenes básicas no están incluidas en la definición del lenguaje, y en vez es un parámetro del tipo?". Debería decir "¿Por qué las imágenes básicas ...?". Es decir, por qué creen que no se embeben directamente las imágenes, y en vez se utiliza un tipo abstracto)

Las imágenes/figuras básicas no están incluídas en la definición del lenguaje porque cada uno puede darle la interpretación que quiere. Se utiliza un tipo abstracto porque hay infinitas figuras, y dar la definición de una figura básica depende totalmente del que la quiera crear.

Respuesta 3

Nuestro Interp.grid:

grid :: Int -> Vector -> Float -> Float -> Picture
grid n v sep l = pictures [ls, translate 0 (l * toEnum n) (rotate 90 ls)]
    where ls = pictures $ take (n + 1) $ hlines v sep l

Es una grilla de n líneas, comenzando en v (vector) con una separación de sep y una longitud de l (usamos composición para no aplicar este argumento)

Entonces:

    pictures [ls, translate 0 (l * toEnum n) (rotate 90 ls)]

Tenemos que ls solo tiene n líneas verticales y falta agregarle otras n lineas horizontales de tal forma que queden superpuestas, para esto usamos rotate 90 de ls, y luego con translate lo trasladamos a la posición en donde quedaría superpesta con ls.

    ls = pictures $ take (n + 1) $ hlines v sep l

En ls se contruye uniendo n lineas en una sola figura, las lineas se construyen en hlines

(Ver en navegador)

Dónde Interp.hlines:

hlines :: Vector -> Float -> Float -> [Picture]
hlines (x, y) mag sep = map (hline . (*sep)) [0..]
  where hline h = line [(x, y + h),(x + mag, y + h)]
[0..] :: (Num a, Enum a) => [a]

En Haskell: Los símbolos que se permite usar para definir operadores son: #, \$, %, &, *, +, ., /, <, =, >, ?, @, \, ^, |, -

El f . g en Haskell es composición de funciones de f y g

Y en Main.hs

    where withGrid p = pictures [p, color grey $ grid 10 (0,0) 100 10]

dónde p:

    p = $ interp (basic cfg) (fig cfg) (0,0) (x,0) (0,y)

y grey:

    grey = makeColorI 120 120 120 120

Entonces

    in display win white . withGrid $ interp (basic cfg) (fig cfg) (0,0) (x,0) (0,y)
    withGrid p = pictures [(interp (basic cfg) (fig cfg) (0,0) (x,0) (0,y)), color (makeColorI 120 120 120 120) $ grid 10 (0,0) 100 10]
    in display win white . (pictures [(interp (basic cfg) (fig cfg) (0,0) (x,0) (0,y)), color (makeColorI 120 120 120 120) $ grid 10 (0,0) 100 10]) $ interp (basic cfg) (fig cfg) (0,0) (x,0) (0,y)

Nuestra experiencia

Estuvimos trabajando a través de Live share de Visual Studio Code, con discord como canal de comunicacón, y usando el guide.md con las indicaciones.

lab01_pdp2021's People

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.