Supongo que querían explícitamente la sintaxis if / then / else que no pueden obtener sin las funciones mixfix como lo han hecho en agda. La función a la que se refiere está estructurada como un ternario, que podría implementar usted mismo, aunque supongo que nos dieron azúcar si / luego / más (es probable que solo sea azúcar sobre un caso) solo porque podrían y es inofensivo ... Pero no tengo nada para respaldarme aquí, por eso estoy escribiendo esto en un comentario.
Jimmy Hoffa
10
Esto puede ser obvio para la mayoría de los lectores, pero me gustaría señalar que tener îf / then / else como función no sería una buena solución en un lenguaje entusiasta (por ejemplo, esquema o sml), mientras que es razonable en un vago lenguaje como Haskell.
Giorgio
Respuestas:
24
Es puramente para el azúcar agradable del if, theny elsepalabras clave; de hecho, GHC (con la RebindableSyntaxextensión habilitada) desugará la sintaxis simplemente llamando a cualquier ifThenElsefunción que esté dentro del alcance.
No importa mucho ... para mí parece que / luego / más no se usa muy a menudo hoy en día. Me encuentro escribiendo guardias de patrones en lugar de if .. then .. else.
Sin embargo, desde un punto de vista sintáctico, es bueno tener
if expr1 then expr2 else expr3
Entonces puedes escribir
if foo a then bar b else baz c
en lugar de
if (foo a) (bar b) (baz c)
lo cual me parece un poco LISPish.
Para el análisis semántico y la generación de código, es bueno tener esta construcción, que puede compilarse fácilmente en un código de máquina eficiente. Tenga en cuenta que el código puede omitir la parte que hace que la rama no se alcance, en lugar de una llamada a la función, donde se deben pasar todos los parámetros (no evaluados). Pero también cuesta tiempo (y memoria, que debe recuperarse más tarde) para crear el thunk. Para cumplir con esto, uno tendría que incluir la función if en todas partes.
No creo que la alineación sea un problema real. Tengo entendido que GHC ya es excepcionalmente bueno para incluir pequeñas funciones, porque es un patrón tan común en Haskell.
Tikhon Jelvis
1
@TikhonJelvis Claro, pero con if / then / else no necesita una función especial que siempre debe alinearse. Ni siquiera necesita un pase de línea y aún puede generar un código decente. No todo el mundo es GHC.
Respuestas:
Es puramente para el azúcar agradable del
if
,then
yelse
palabras clave; de hecho, GHC (con laRebindableSyntax
extensión habilitada) desugará la sintaxis simplemente llamando a cualquierifThenElse
función que esté dentro del alcance.fuente
No importa mucho ... para mí parece que / luego / más no se usa muy a menudo hoy en día. Me encuentro escribiendo guardias de patrones en lugar de if .. then .. else.
Sin embargo, desde un punto de vista sintáctico, es bueno tener
Entonces puedes escribir
en lugar de
lo cual me parece un poco LISPish.
Para el análisis semántico y la generación de código, es bueno tener esta construcción, que puede compilarse fácilmente en un código de máquina eficiente. Tenga en cuenta que el código puede omitir la parte que hace que la rama no se alcance, en lugar de una llamada a la función, donde se deben pasar todos los parámetros (no evaluados). Pero también cuesta tiempo (y memoria, que debe recuperarse más tarde) para crear el thunk. Para cumplir con esto, uno tendría que incluir la función if en todas partes.
fuente