42 lines
1.2 KiB
Markdown
42 lines
1.2 KiB
Markdown
# 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.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|