uqbar-project / wollok-language

Wollok language definition
GNU General Public License v3.0
7 stars 8 forks source link

list.get de un flotante #87

Closed PalumboN closed 3 years ago

PalumboN commented 3 years ago

Con @tfloxolodeiro nos dimos cuenta que Wollok Xtext trunca el índice del get a un número entero. Por ejemplo:

>>> [3,6,9,10].get(0.5)
3
>>> [3,6,9,10].get(0.9)
3
>>> [3,6,9,10].get(0.99)
3
>>> [3,6,9,10].get(1.99)
6

No recuerdo si esto es un bug o un feature, para replicarlo en TS. @fdodino @nscarcella @npasserini etc etc...

fdodino commented 3 years ago

Es un feature, y se puede configurar para que trunque, redondee o tire error (eso se cuenta en el apunte Módulo 04: Objetos básicos. Números. Strings. Fechas. Conjuntos. Listas). Igual, igual, lo chequearía cambiando Window > Preferences > Wollok > Number configuration.

Lo segundo: podríamos tomar un comportamiento default, para mí flasheamos demasiado con Lucas y Nico y es un feature que no solo no se usa sino que nosotros ni siquiera sabemos que está, jajaj.

PalumboN commented 3 years ago

Jajajaj ok, sí recordaba que algo de eso pasaba. Ahora el "default" es truncar por lo que entiendo, tenía pensado tener ese mismo comportamiento para TS ya que sino algunos juegos andan en xtext pero no en ts.

PalumboN commented 3 years ago

@fdodino estamos resolviendo este issue para que, en primera instancia, Wollok-TS se comporte como el default actual de Wollok. Hablando con @npasserini @nscarcella @lspigariol creeríamos que el default era el redondeo, además aparece como el default en la config: image

Pero probando en la consola vimos que lo que está haciendo es truncándolo. Te acordás qué habíamos decidido en su momento? :P Cuál esperarías que fuera el comportamiento default?

También charlamos sobre los problemas de precisión que tiene Wollok (y eventualmente cualquier computadora) y sobre cómo queremos tratarla:

fdodino commented 3 years ago

Holis!!

Lo está redondeando, pero toma en consideración los decimales (por default 5), entonces

>>> [1, 2, 3].get(0.99999)
1
>>> [1, 2, 3].get(0.999999)
2

No se qué prefieren hacer acá, en su momento hubo una discusión muy larga y con Lucas y NicoP cerramos en poder configurarlo. No se si valió tanto la pena, con el diario del lunes, pero me resulta simpático cómo lo maneja ahora.

PalumboN commented 3 years ago

Ok, entonces lo que hace es redondear siempre a 5 decimales, y para el caso del list.get se trunca la parte entera de ese redondeo, estoy en lo correcto? Tenemos que pasar esta lógica a TS, la mantenemos así o la cambiamos? En la charla del otro día dijimos de redondear pero no con todos estos detalles (sigue habiendo diferencias con lo que hicieron les becaries). @fdodino @npasserini @nscarcella @lspigariol

fdodino commented 3 years ago

Ok, entonces lo que hace es redondear siempre a 5 decimales, y para el caso del list.get se trunca la parte entera de ese redondeo, estoy en lo correcto?

Sí, es correcto!

Tenemos que pasar esta lógica a TS, la mantenemos así o la cambiamos?

La idea me parecía bien: lista.get(0.9) la redondearía a list.get(1), es muy retorcido cómo funciona hoy, podemos incluso ajustarlo en Wollok Xtext (no me lleva mucho tiempo).