Eu acho que eles queriam explicitamente a sintaxe if / then / else que eles não podem obter sem as funções mixfix como no agda. A função a que você se refere é estruturada como ternária, que você pode implementar a si mesmo, embora eu presuma que eles nos deram açúcar if / then / else (provavelmente é apenas açúcar em um caso) só porque eles poderiam e é inofensivo. Mas eu não tenho nada para me apoiar aqui, e é por isso que estou escrevendo isso em um comentário.
Jimmy Hoffa
10
Isso pode ser óbvio para a maioria dos leitores, mas eu gostaria de salientar que ter îf / then / else como uma função não seria uma boa solução em um idioma ansioso (por exemplo, schema ou sml) enquanto for razoável em um ambiente preguiçoso linguagem como Haskell.
Giorgio
Respostas:
24
É puramente para o açúcar agradável da if, thene elsepalavras-chave; de fato, o GHC (com a RebindableSyntaxextensão ativada) alterará a sintaxe simplesmente chamando qualquer ifThenElsefunção que esteja no escopo.
Não importa muito ... para mim, parece que se / então / outro não é usado com muita frequência hoje em dia. Eu me pego escrevendo guardas de padrões instad de se ... então ... mais.
Do ponto de vista sintático, porém, é bom ter
if expr1 then expr2 else expr3
Então você pode escrever
if foo a then bar b else baz c
ao invés de
if (foo a) (bar b) (baz c)
o que parece um pouco demais para mim.
Para análise semântica e geração de código, é bom ter essa construção, que pode ser facilmente compilada em código de máquina eficiente. Observe que o código pode ignorar a parte que faz a conversão para a ramificação que não é alcançada, em oposição a uma chamada de função, na qual todos os parâmetros (não avaliados) devem ser passados. Mas também custa tempo (e memória, que deve ser recuperado posteriormente) para criar a conversão. Para resolver isso, seria necessário alinhar a função if em qualquer lugar.
Não acho que o inlining seja um problema real. Meu entendimento é que o GHC já é excepcionalmente bom em embutir pequenas funções, porque é apenas um padrão tão comum em Haskell.
Tikhon Jelvis
1
@TikhonJelvis Claro, mas com if / then / else você não precisa de uma função especial que sempre deve ser incorporada. Você nem precisa de um passe embutido e ainda pode gerar um código decente. Nem todo o mundo é GHC.
Respostas:
É puramente para o açúcar agradável da
if
,then
eelse
palavras-chave; de fato, o GHC (com aRebindableSyntax
extensão ativada) alterará a sintaxe simplesmente chamando qualquerifThenElse
função que esteja no escopo.fonte
Não importa muito ... para mim, parece que se / então / outro não é usado com muita frequência hoje em dia. Eu me pego escrevendo guardas de padrões instad de se ... então ... mais.
Do ponto de vista sintático, porém, é bom ter
Então você pode escrever
ao invés de
o que parece um pouco demais para mim.
Para análise semântica e geração de código, é bom ter essa construção, que pode ser facilmente compilada em código de máquina eficiente. Observe que o código pode ignorar a parte que faz a conversão para a ramificação que não é alcançada, em oposição a uma chamada de função, na qual todos os parâmetros (não avaliados) devem ser passados. Mas também custa tempo (e memória, que deve ser recuperado posteriormente) para criar a conversão. Para resolver isso, seria necessário alinhar a função if em qualquer lugar.
fonte