projprog/HSK2.md

42 lines
1.2 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Haskell 2
### Exercice 1
```
GHCi, version 8.6.5: http://www.haskell.org/ghc/ :? for help
Prelude> 2+5
7
Prelude> 5/2
2.5
Prelude> 2^4
16
Prelude> -3
-3
Prelude> 2 + -3
<interactive>:5:1: error:
Precedence parsing error
cannot mix + [infixl 6] and prefix `-' [infixl 6] in the same infix expression
Prelude> 2 + (-3)
-1
Prelude> 2-3
-1
Prelude>
```
Haskell ne comprend pas `2 + - 3` car `-` et `+` ont la même précédence, et que dans ce cas, les instructions sont lues de gauche à droite, et lorsque le compilateur trouve `-` comme second terme de l'additon, il se plaint que ce n'est pas un nombre.
### Exercice 2
1. Non, le parenthesage impose au calcul `2+4` de se faire avant, contredisant la précédence plus élevée du `*`.
2. Il y a 10 niveaux, de 1 à 9.
3. Le niveau de précédence est indiqué à la toute fin après `infixl`.
4. Pas le même résultat, l'opérateur `^` est infixe *à droite* contrairement à plus et moins qui sont infixes *à gauche*.
5. `(^)` est donc associatif à droite.
6. La direction de l'associativité est donnée en bas du `:info` : `infixl` pour une associativité à gauche et `infixr` pour une associativité à droite.