IIC2233 / Syllabus-2017-1

Repositorio oficial del curso IIC2233 Programación Avanzada
https://iic2233.github.io/
16 stars 32 forks source link

Duda asignar #343

Closed seba608 closed 7 years ago

seba608 commented 7 years ago

Hola!

Estoy un poco confundido con este comando. En el enunciado dice que asignar debe retornar None, por lo que se debe asignar "comando o dato" a variable dentro de la función, pero según lo que tengo entendido, eso haría que la asignación funcione solo dentro de la función y no fuera de ella.

Yo pensaba en hacer a = asignar(*argumentos), pero si hago eso no estaría cumpliendo con que asignar retorne None. ¿Cómo se puede asignar sin caer en este error?

iqacevedo commented 7 years ago

Hola!

Con que retorne None se refiere a que no retorne un dato o algo en especifico, solo que haga algo en especifico (es como la función print en python, ya que hace algo pero no retorna nada, ningún objeto).

Lo que hace asignar es guardar en el programa el valor que le ingresas como último argumento en la variable que se ingresa como primer argumento. Es equivalente a hacer b = 1 en python para guardar el número 1 en la variable b, después si llamas a la variable b debería valer 1, en el lenguaje RQL de la tarea el equivalente seria la consulta ["asignar", "b", 1].

Espero quede más claro con la explicación.

Saludos!

seba608 commented 7 years ago

Si entiendo, pero mi duda es que si yo asigno algo dentro de una función, ¿el "scope" no sería solo dentro de esa función?

Saludos!

iqacevedo commented 7 years ago

Debes encontrar la manera de guardar algo dentro de la función pero que pueda ser accedido desde cualquier parte de tu programa, puedes usar una EDD que almacene las variables que se han ingresado, pero tu debes decidir como hacerlo.

Efectivamente si escribes algo del estilo:

def guardar_variables(valor):
    b = valor

no podrás acceder a b desde afuera de la función, por lo que debes buscar la manera de que esa variable quede guardada para todo el programa.

Saludos!

seba608 commented 7 years ago

Perfecto, muchas gracias!

acrojas2 commented 7 years ago

Hola: No entiendo que es lo que se guarda cuando se ingresa un comando. Saludos!

iqacevedo commented 7 years ago

Hola

Si lo que se ingresa como valor es un comando, se debe guardar el retorno del comando. Por ejemplo:

1-.["asignar", "c", ["extraer_columna", "registros", "tiempo_sano"]] debería guardar en la varibale c la columna tiempo_sano del archivo registros.csv (que corresponde al retorno del comando ["extraer_columna", "registros", "tiempo_sano"]). 2-.["asignar", "d", ["LEN", ["extraer_columna", "registros", "tiempo_sano"]]] debería guardar en la variable d el número de datos de la columna tiempo_sano del archivo registros.csv.

Saludos !

acrojas2 commented 7 years ago

@iqacevedo Como podría no haber circularidad en tus ejemplos, dado que por ejemplo en el caso 1, para calcular lo que se va asignar a c, habría que interpretar ["extraer_columna", "registros", "tiempo_sano"] y en el otro pasaría lo mismo, y como estas consultas para procesarlas pasan primero por interpretar se provocaría la circularidad o no? o como se debería leer de adentro a afuera en los parentesis, asignar recibe el resultado y no debe llamar a interpretar? Saludos! :B

DiegoAndai commented 7 years ago

@acrojas2 la idea de no hacer programación circular es la siguiente.

Digamos que tenemos X,Y,Z que son 3 funciones distintas. Si X llama a Y, dentro de Y no se puede llamar a X. Primero tiene que hacer return y estando de vuelta en X se puede llamar a Y para otra cosa o a Z. Otra forma de analizar esto es si ves las funciones como un camino, si partes de X y te cambias a Y, ningún camino llega de nuevo a X si solo avanzas, debes retroceder (mediante return) para tomar el camino principal (de X).

No es el objetivo de este foro, ni de los ayudantes responder preguntas de "como se hace", ese es el desafío que se les presenta en la tarea y que deben resolver ustedes.

Saludos.

berrazuriz1 commented 7 years ago

@iqacevedo pero si uso una EDD la tendría que poner como parametro, y en el enunciado sale que solo puede tener como parametros la variable y su valor.

Hernan4444 commented 7 years ago

360

Saludos!!

berrazuriz1 commented 7 years ago

@Hernan4444 Gracias, no estaba seguro si se podía.

acrojas2 commented 7 years ago

@DiegoAndai creo que mi pregunta no se entendió, no quería preguntar cómo hacerlo, sino que iba enfocada a si el argumento de asignar era (variable, consulta_resuelta) o (variable, consulta_no_resuelta), pero ya lo entendí, muchas gracias. Saludos :B