summaryrefslogtreecommitdiff
path: root/TYLA/Subprograms.md
blob: a36d26d535d09d384648990b5e412e33a01f60a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# Procédures
- Sous-programmes sans valeur retournée
- Effets de bords nécessaires
# Fonctions
- Sous-programmes retournant une valeur
- Sans effets de bord
Certains langages n'ont pas la distinction (retour null/None...)
# Methodes
Procédures associées à une entité, prise en argument implicitement
# Pointeurs de fonction
Le code d'une fonction est en mémoire et a donc une adresse
# Objets fonctionnels
e.g. C++
Permettent de garder un état préservé entre les appels
# Closures
Fonction capturant des variables non locales appelées environnement
Paire `{function_ptr, env}`
# Lambdas
Combinaise d'une fonction anonyme et d'une closure
# Arguments
- **argument formel** : argument dans la déclaration du sous-programme
- **argument effectif** : argument dans l'appel du sous-programme
- **paramètres** : réservés à la généricité
# Applications partielles
Passage d'une partie des arguments au sous-programme pour renvoyer une fonction prenant le reste des arguments
# Curryfication
Traduction d'une fonction à plusieurs arguments en plusieurs fonction d'un seul argument
# Arguments nommés et par défaut
Permettent de spécifier certains arguments et d'avoir une valeur par défaut pour les autres

# Passage d'arguments
## Call by value
- Arguments passés en copie -> pas d'effets de bord
- Evalués avant l'appel
## Call by reference
- Pointeurs passés vers la valeur -> modification de la donnée
- Attention si 2x le même pointeur
## Call by value-result
Ada `in out`
- Arguments évalués à l'appel de la fonction et passés en copie
- Arguments recopiés à la fin de la fonction (modifiés ou pas)
ALGOL-W :
- Arguments évalués et copiés à l'appel
- Arguments ré-évalués au retour pour la recopie
## Call by name
Arguments évalués à chaque utilisation
## Call by need
-> Lazy initialization