OpenLLM-France/wikimedia huggingface dataset:
# Phytosociologie/Classes CATMINAT de végétation en France/Clé de détermination 06

Les classes de végétation décrites ici sont celles définies en phytosociologie selon la typologie CATMINAT. On les y classe selon un système de type binomial, classique en taxonomie, avec une clé de détermination primaire qui se décline en plusieurs clés secondaires.

## Description de la clé primaire

06/ : Tourbières hautes, tourbières basses et tremblants, prairies tourbeuses. (voir aussi le 05/3.2.1 pour les cariçaies aquatiques, les cladiaies et roselières des sols tourbeux à pH neutre et les 14/4 et 14/5 pour les landes à chaméphytes).

### Seconde clef de détermination

| Clé | Désignation | Description |
| 06/1 | Scheuchzerio palustris - Caricetea nigrae | Végétation herbacée vivace des tourbières (haut-marais et bas-marais tourbeux à paratourbeux, pelouses humides et tremblants aquatiques), se développant sur des sols pauvres à moyennement pauvres en azote. |
| 06/2 | Aulacomnio palustris - Sphagnetea fallacis | Végétation muscinale des tourbières acides. |
| 06/3 | Drepanoclado revolventis - Campylietea stellati | Végétation muscinale des tourbières neutro-basiques et tufs calcaires. |

## Voir aussi
### Liens internes

* la Phytosociologie
* Les autres clés de détermination primaire:
** 01 : Eaux marines océaniques et littorales à végétation aquatique essentiellement algale
** 02 : Littoral maritime à végétation aérienne...
** 03 : Eaux continentales à sublittorales...
** 04 : Zones humides plus ou moins amphibies, des bords de lacs, d'étangs, de rivières...
** 05 : Zones humides, parfois amphibies, des bords de lacs, étangs, fleuves, rivières...
** 07 : Parois plus ou moins verticales des murs et rochers non marins; éboulis...
** 08 : Dalles rocheuses horizontales et sables plus ou moins stabilisés...
** 09 : Pelouses, steppes et ourlets développés sur des sols riches en calcium...
** 10 : Pelouses, ourlets et herbes vivaces des coupes forestières sur sols acides...
** 11 : Pelouses permanentes des étages alpin à subalpin...
** 12 : Prairies eurosibériennes des sols moyennement riches à riches en azote...
** 13 : Cultures, friches, coupes forestières à sols perturbés...
** 14 : Landes et garrigues à plantes vivaces ligneuses...
** 15 : Haies arbustives, halliers, fruticées, maquis, matorrals...
** 16 : Végétations arborescentes et herbacées intraforestières...
# Phytosociologie/Classes CATMINAT de végétation en France/Clé de détermination 03

Les classes de végétation décrites ici sont celles définies en phytosociologie selon la typologie CATMINAT. On les y classe selon un système de type binomial, classique en taxonomie, avec une clé de détermination primaire qui se décline en plusieurs clés secondaires.

## Description de la clé primaire

03/ : Eaux continentales à sublittorales, douces à saumâtres, en nappes libres et affleurantes, des lacs, étangs, mares, fleuves et rivières, d'origines naturelles ou créés par l'homme.

### Seconde clef de détermination

| Clé | Désignation | Description |
| 03/1 | Lemnetea minoris | Voiles de plantes annuelles aquatiques, flottant librement en surface des eaux douces stagnantes à faiblement mobiles, préférant la lumière mais supportant un ombrage moyen. |
| 03/2 | Potamogetonetea pectinati | Herbiers dulcaquicoles immergés, surtout vivaces et le plus souvent enracinés, des eaux eutrophes à mésotrophes. |
| 03/3 | Utricularietea intermedio – minoris | Herbiers dulcaquicoles immergés des eaux dystrophes et organiques à oligotrophes. |
| 03/4 | Charetea fragilis | Herbiers dulcaquicoles de charophytes, pionniers dans les milieux perturbés peu profonds, ou permanents et préférant la faible luminosité des profondeurs (jusqu'à 40 m), dans les eaux calmes ou faiblement courantes, généralement pauvres en azote et phosphore, bien oxygénées, des lacs, étangs et chenaux. |
* la Phytosociologie
* Les clés de détermination primaire:
** 01 : Eaux marines océaniques et littorales à végétation aquatique essentiellement algale
** 02 : Littoral maritime à végétation aérienne...
** 03 : Eaux continentales à sublittorales...
** 04 : Zones humides plus ou moins amphibies, des bords de lacs, d'étangs, de rivières...
** 05 : Zones humides, parfois amphibies, des bords de lacs, étangs, fleuves, rivières...
** 06 : Tourbières hautes, tourbières basses et tremblants...
** 07 : Parois plus ou moins verticales des murs et rochers non marins; éboulis...
** 08 : Dalles rocheuses horizontales et sables plus ou moins stabilisés...
** 09 : Pelouses, steppes et ourlets développés sur des sols riches en calcium...
** 10 : Pelouses, ourlets et herbes vivaces des coupes forestières sur sols acides...
** 11 : Pelouses permanentes des étages alpin à subalpin...
** 12 : Prairies eurosibériennes des sols moyennement riches à riches en azote...
** 13 : Cultures, friches, coupes forestières à sols perturbés...
** 14 : Landes et garrigues à plantes vivaces ligneuses...
** 15 : Haies arbustives, halliers, fruticées, maquis, matorrals...
** 16 : Végétations arborescentes et herbacées intraforestières...
# Phytosociologie/Classes CATMINAT de végétation en France/Clé de détermination 05

Les classes de végétation décrites ici sont celles définies en phytosociologie selon la typologie CATMINAT. On les y classe selon un système de type binomial, classique en taxonomie, avec une clé de détermination primaire qui se décline en plusieurs clés secondaires.

## Description de la clé primaire

05/ : Zones humides, parfois amphibies, des bords de lacs, étangs, fleuves, rivières, torrents, sources, dépressions diverses, à végétation herbacée haute (roselières, cariçaies, mégaphorbiaies), recouvrant généralement complètement le sol. (voir aussi le 06/ "Tourbières" pour les tremblants de colonisation des bords de lacs tourbeux).

### Seconde clef de détermination

| Clé | Désignation | Description |
| 05/1 | Cicerbito alpinae - Aconitetea napelli | Végétation de plantes vivaces herbacées des mégaphorbiaies subalpines à montagnardes et boréales. |
| 05/2 | Filipendulo ulmariae - Calystegietea sepium subsp. sepium | Végétation de plantes vivaces herbacées des mégaphorbiaies planitiaires à collinéennes. Elles se rencontrent au bord des rivières (souvent en situation plus ou moins forestière) et colonisent les prairies humides abandonnées, sur des sols plus ou moins riches en azote et phosphore, inondés généralement seulement l'hiver. |
| 05/3 | Phragmiti australis - Caricetea elatae | Végétation herbacée vivace de grandes plantes des bords d'étangs et de lacs, plus rarement de rivières, se développant sur des sols engorgés longuement, moyennement riches à riches en azote, parfois tourbeux mais toujours de pH neutre. |

## Voir aussi
### Liens internes

* la Phytosociologie
* Les autres clés de détermination primaire:
** 01 : Eaux marines océaniques et littorales à végétation aquatique essentiellement algale
** 02 : Littoral maritime à végétation aérienne...
** 03 : Eaux continentales à sublittorales...
** 04 : Zones humides plus ou moins amphibies, des bords de lacs, d'étangs, de rivières...
** 06 : Tourbières hautes, tourbières basses et tremblants...
** 07 : Parois plus ou moins verticales des murs et rochers non marins; éboulis...
** 08 : Dalles rocheuses horizontales et sables plus ou moins stabilisés...
** 09 : Pelouses, steppes et ourlets développés sur des sols riches en calcium...
** 10 : Pelouses, ourlets et herbes vivaces des coupes forestières sur sols acides...
** 11 : Pelouses permanentes des étages alpin à subalpin...
** 12 : Prairies eurosibériennes des sols moyennement riches à riches en azote...
** 13 : Cultures, friches, coupes forestières à sols perturbés...
** 14 : Landes et garrigues à plantes vivaces ligneuses...
** 15 : Haies arbustives, halliers, fruticées, maquis, matorrals...
** 16 : Végétations arborescentes et herbacées intraforestières...
# Phytosociologie/Classes CATMINAT de végétation en France/Clé de détermination 04

Les classes de végétation décrites ici sont celles définies en phytosociologie selon la typologie CATMINAT. On les y classe selon un système de type binomial, classique en taxonomie, avec une clé de détermination primaire qui se décline en plusieurs clés secondaires.

## Description de la clé primaire

04/ : Zones humides plus ou moins amphibies, des bords de lacs, d'étangs, de rivières, sources et dépressions diverses, à végétation herbacée basse plus ou moins éparse, ne recouvrant pas totalement le sol.

### Seconde clef de détermination

| Clé | Désignation | Description |
| 04/1 | Nasturtietea officinalis | Végétation de plantes herbacées vivaces et enracinées, aérienne mais se développant dans des eaux peu profondes, aimant la lumière, formant souvent des sortes d'ourlets flottants des roselières mais se développant parfois en nappe, en particulier dans les petites rivières peu profondes et les fossés à faible courant d'eau de l'étage planitiaire. |
| 04/2 | Montio fontanae - Cardaminetea amarae | Végétation herbacée vivace aimant l'humidité des bords de source. |
| 04/3 | Littorelletea uniflorae | Végétation herbacée vivace, rase, aquatique à amphibie, des sols pauvres en azote et parfois tourbeux des bords de lacs et d'étangs. |
| 04/4 | Isoëtetea velatae | Pelouses rases amphibies des mares temporaires, constituées de plantes herbacées vivaces, se développant sur des sols pauvres en azote, en zones à climat chaud. |
| 04/5 | Juncetea bufonii | Végétation de plantes annuelles des lieux humides, se rencontrant sur des sols moyennement riches à pauvres en azote et en phosphore. |
| 04/6 | Bidentetea tripartitae | Végétation de plantes annuelles a développement estival, pionnière sur sols humides riches en azote et phosphore, s'asséchant l'été. |
| 04/7 | Oryzetea sativae | Végétation de plantes annuelles accompagnatrices des cultures de riz. |
* la Phytosociologie
* Les clés de détermination primaire:
** 01 : Eaux marines océaniques et littorales à végétation aquatique essentiellement algale
** 02 : Littoral maritime à végétation aérienne...
** 03 : Eaux continentales à sublittorales...
** 04 : Zones humides plus ou moins amphibies, des bords de lacs, d'étangs, de rivières...
** 05 : Zones humides, parfois amphibies, des bords de lacs, étangs, fleuves, rivières...
** 06 : Tourbières hautes, tourbières basses et tremblants...
** 07 : Parois plus ou moins verticales des murs et rochers non marins; éboulis...
** 08 : Dalles rocheuses horizontales et sables plus ou moins stabilisés...
** 09 : Pelouses, steppes et ourlets développés sur des sols riches en calcium...
** 10 : Pelouses, ourlets et herbes vivaces des coupes forestières sur sols acides...
** 11 : Pelouses permanentes des étages alpin à subalpin...
** 12 : Prairies eurosibériennes des sols moyennement riches à riches en azote...
** 13 : Cultures, friches, coupes forestières à sols perturbés...
** 14 : Landes et garrigues à plantes vivaces ligneuses...
** 15 : Haies arbustives, halliers, fruticées, maquis, matorrals...
** 16 : Végétations arborescentes et herbacées intraforestières...
# Phytosociologie/Classes CATMINAT de végétation en France/Clé de détermination 07

Les classes de végétation décrites ici sont celles définies en phytosociologie selon la typologie CATMINAT. On les y classe selon un système de type binomial, classique en taxonomie, avec une clé de détermination primaire qui se décline en plusieurs clés secondaires.

## Description de la clé primaire

07/ : Parois plus ou moins verticales des murs et rochers non marins ; éboulis.

### Seconde clef de détermination

| Clé | Désignation | Description |
| 07/1 | Adiantetea capilli-veneris | Végétation vivace herbacée, des suintements humides et ombragés sur roches calcaires ou riches en bases échangeables, dans les régions à climats plutôt chauds. |
| 07/2 | Asplenietea trichomanis | Végétation de plantes vivaces herbacées des murs et parois de rochers plus ou moins verticaux, non ou peu humides. |
| 07/3 | Noccaeetea rotundifoliae | Végétation de plantes vivaces herbacées des éboulis plus ou moins mobiles et plus ou moins fins. |
* la Phytosociologie
* Les clés de détermination primaire:
** 01 : Eaux marines océaniques et littorales à végétation aquatique essentiellement algale
** 02 : Littoral maritime à végétation aérienne...
** 03 : Eaux continentales à sublittorales...
** 04 : Zones humides plus ou moins amphibies, des bords de lacs, d'étangs, de rivières...
** 05 : Zones humides, parfois amphibies, des bords de lacs, étangs, fleuves, rivières...
** 06 : Tourbières hautes, tourbières basses et tremblants...
** 07 : Parois plus ou moins verticales des murs et rochers non marins; éboulis...
** 08 : Dalles rocheuses horizontales et sables plus ou moins stabilisés...
** 09 : Pelouses, steppes et ourlets développés sur des sols riches en calcium...
** 10 : Pelouses, ourlets et herbes vivaces des coupes forestières sur sols acides...
** 11 : Pelouses permanentes des étages alpin à subalpin...
** 12 : Prairies eurosibériennes des sols moyennement riches à riches en azote...
** 13 : Cultures, friches, coupes forestières à sols perturbés...
** 14 : Landes et garrigues à plantes vivaces ligneuses...
** 15 : Haies arbustives, halliers, fruticées, maquis, matorrals...
** 16 : Végétations arborescentes et herbacées intraforestières...
# Phytosociologie/Classes CATMINAT de végétation en France/Clé de détermination 08

Les classes de végétation décrites ici sont celles définies en phytosociologie selon la typologie CATMINAT. On les y classe selon un système de type binomial, classique en taxonomie, avec une clé de détermination primaire qui se décline en plusieurs clés secondaires.

## Description de la clé primaire

08/ : Dalles rocheuses horizontales et sables plus ou moins stabilisés, zones à sols très superficiels généralement de faible niveau trophique et supportant la sécheresse.

### Seconde clef de détermination

| Clé | Désignation | Description |
| 08/1 | Sedo albi subsp. albi - Scleranthetea perennis subsp. perennis | Pelouses herbacées vivaces, plus ou moins ouvertes, parfois crassulescentes, des sols superficiels sur dalles et rochers plus ou moins horizontaux, sommets de murs et sables plus ou moins stabilisés. |
| 08/2 | Violetea calaminariae | Pelouses vivaces herbacées, présente sur des terrains calaminaires, chargés en métaux lourds. |
| 08/3 | Tuberarietea guttatae | Tonsures herbacées annuelles, présentes sur les sols sableux pauvres en azote, ou sur des sols très superficiels sur rochers, secs à moyennement secs (dans ce cas s'asséchant l'été), plutôt acides. |
| 08/4 | Stipo capensis - Brachypodietea distachyi | Tonsures herbacées annuelles, des sols secs à pH neutre à basique, calciques, pauvres en azote, ou des sols initiaux sur rochers. |
| 08/5 | Ononido variegatae - Cutandietea maritimae | Tonsures annuelles basophiles, sabulicoles, maritimes, thermoméditerranéennes. |
* la Phytosociologie
* Les clés de détermination primaire:
** 01 : Eaux marines océaniques et littorales à végétation aquatique essentiellement algale
** 02 : Littoral maritime à végétation aérienne...
** 03 : Eaux continentales à sublittorales...
** 04 : Zones humides plus ou moins amphibies, des bords de lacs, d'étangs, de rivières...
** 05 : Zones humides, parfois amphibies, des bords de lacs, étangs, fleuves, rivières...
** 06 : Tourbières hautes, tourbières basses et tremblants...
** 07 : Parois plus ou moins verticales des murs et rochers non marins; éboulis...
** 08 : Dalles rocheuses horizontales et sables plus ou moins stabilisés...
** 09 : Pelouses, steppes et ourlets développés sur des sols riches en calcium...
** 10 : Pelouses, ourlets et herbes vivaces des coupes forestières sur sols acides...
** 11 : Pelouses permanentes des étages alpin à subalpin...
** 12 : Prairies eurosibériennes des sols moyennement riches à riches en azote...
** 13 : Cultures, friches, coupes forestières à sols perturbés...
** 14 : Landes et garrigues à plantes vivaces ligneuses...
** 15 : Haies arbustives, halliers, fruticées, maquis, matorrals...
** 16 : Végétations arborescentes et herbacées intraforestières...
# Programmation C sharp/Exécution distante

Cette page est considérée comme une ébauche à compléter . Si vous possédez quelques connaissances sur le sujet, vous pouvez les partager en éditant dès à présent cette page (en cliquant sur le lien « »).
Ressources suggérées : Programmation C sharp/Bibliographie et liens
Une application .NET peut être un service distant et peut s'exécuter comme :

## Serveur Remoting

À l'aide de la librairie System.Runtime.Remoting à placer dans l'application servante et cliente, celles-ci peuvent partager une classe par Marshaling suivant un canal Http, Ipc ou Tcp.
Le remoting utilise les échanges RPC.
Dans cette solution :
* INTERFACE : IRemoteMath est une librairie de classe
* SERVER : RemoteServer est une application console
* CLIENT : RemoteClient est une application console

## L'interface partagée

Une interface IOperations comprenant un prototype d'addition.

### Le serveur

Le serveur est l'application qui distribue ses services. Pour qu'elle déserve à distance, il lui faut :
* Dans ses références :
   * System.Runtime.Remoting
   * Le namespace d'IRemoteMath
* Implémenter IOperations

#### Implémenter IOperations

La classe à servir doit faire partie du service distributeur ici RemoteServer
MarshalByRefObject signifie que RemoteOperations fera l'objet d'un marshaling.

#### Configurer RemoteMain

Pour écouter les appels, le serveur doit créer un canal d'écoute sur un port et enregistrer le service à distribuer.
* [STAThread] au point d'entrée instruit le main comme "appartement" pour cloisonner les traitements au partage de ses ressources.
* RemotingConfiguration.RegisterWellKnownServiceType enregistre RemoteOperations dans ses services
* Le canal est ici en TCP

### Le client

Le client appelle les services. Pour qu'elle soit servie, il lui faut :
* Dans ses références :
   * System.Runtime.Remoting
   * Le namespace d'IRemoteMath
* [STAThread] indique qu'on est dans le même type de cloisonnement des threads que pour server.
* remoteOperation dépile la classe reçu par TCP permettant l'utilisation de ses propriétés.

### Application

* Pour effectuer le test, il faut compiler les trois projets IRemoteMath,RemoteServer,RemoteClient
* Executer RemoteServer.exe avant RemoteClient.exe
Le résultat du client devrait être :
Le message du serveur devrait être :
# Programmation JavaScript/Exceptions et erreurs

* Introduction
    Programmer en deux minutes
*   * Page wiki
*   * Compteur en temps réel
*   * Site dans un document
* Outils de développement
* Syntaxe
** Ligne d'instruction
** Ordre d'évaluation
** Bloc d'instructions
** Identificateurs
** Expression littérale
** Commentaire
** Mots réservés
** Variables
** Opérateurs
** Structures de contrôle
** Exceptions et erreurs
** Fonctions utilisateur
** Évènement
* Objets prédéfinis
** window
** document
** navigator
** Array
** Boolean
** Date
** Error
** Function
** Math
** Number
** Object
** String
** Element
** RegExp
* Fonctions prédéfinies
* Programmation avancée
** Opérateurs de bits
** Fermeture
** Programmation objet
** Notation JSON
** AJAX
** Stockage
** Générateurs
** Interface DOM
** Objets Microsoft
* Frameworks
** Dojo
    Hello World
    Widgets
    Ressources
** jQuery
** Node.js
** React.js
* Tests
** Ava
** Jest
** Cypress
* Débogage
* Erreurs connues
* Références
* Introduction
    Programmer en deux minutes
*   * Page wiki
*   * Compteur en temps réel
*   * Site dans un document
* Outils de développement
* Syntaxe
** Ligne d'instruction
** Ordre d'évaluation
** Bloc d'instructions
** Identificateurs
** Expression littérale
** Commentaire
** Mots réservés
** Variables
** Opérateurs
** Structures de contrôle
** Exceptions et erreurs
** Fonctions utilisateur
** Évènement
* Objets prédéfinis
** window
** document
** navigator
** Array
** Boolean
** Date
** Error
** Function
** Math
** Number
** Object
** String
** Element
** RegExp
* Fonctions prédéfinies
* Programmation avancée
** Opérateurs de bits
** Fermeture
** Programmation objet
** Notation JSON
** AJAX
** Stockage
** Générateurs
** Interface DOM
** Objets Microsoft
* Frameworks
** Dojo
    Hello World
    Widgets
    Ressources
** jQuery
** Node.js
** React.js
* Tests
** Ava
** Jest
** Cypress
* Débogage
* Erreurs connues
* Références
[ Modifier le sommaire ]

## try / catch / finally

Pour éviter qu'une erreur interrompe l'exécution du programme, on peut l'attraper et définir des actions à effectuer si elle survient.
Les exceptions les plus courantes sont des ressources introuvables (ex : plus de réseau ou base de données en maintenance) ou des calculs impossibles comme les divisions par zéro.

### Exemples

Appel réseau :
Calcul d'une moyenne :
Dans cet exemple, la division par zéro montre que l'exécution est toujours interrompue avant l'affichage de la moyenne, pour passer dans le bloc catch puis le finally.
Si on corrige la division, on constate qu'on ne passe plus dans le bloc catch, mais toujours dans le finally (même si les blocs qui le précèdent contiennent un return).

## throw

Il est aussi possible de provoquer soi-même des exceptions pour interrompre une exécution.

### Exemples

Calcul d'une moyenne :
Ici la division par zéro ne provoque pas d'exception, mais renvoie Infinity. On la provoque donc explicitement ensuite.
Calcul d'un âge :
# Programmation JavaScript/Informations
### Informations

* Aide :
** Laisser un message
** (anglais) JavaScript
* Modèles disponibles :
** {{Programmation JavaScript}}
** {{cadre code}}
** {{cadre fichier}}
** {{cadre méthode}}
** {{Version PDF|Programmation JavaScript/PDF}}
* À faire :
** illustrer avec des exemples
** ajouter des exercices (comme sur la version anglaise)
# Programmation JavaScript/Générateurs

* Introduction
    Programmer en deux minutes
*   * Page wiki
*   * Compteur en temps réel
*   * Site dans un document
* Outils de développement
* Syntaxe
** Ligne d'instruction
** Ordre d'évaluation
** Bloc d'instructions
** Identificateurs
** Expression littérale
** Commentaire
** Mots réservés
** Variables
** Opérateurs
** Structures de contrôle
** Exceptions et erreurs
** Fonctions utilisateur
** Évènement
* Objets prédéfinis
** window
** document
** navigator
** Array
** Boolean
** Date
** Error
** Function
** Math
** Number
** Object
** String
** Element
** RegExp
* Fonctions prédéfinies
* Programmation avancée
** Opérateurs de bits
** Fermeture
** Programmation objet
** Notation JSON
** AJAX
** Stockage
** Générateurs
** Interface DOM
** Objets Microsoft
* Frameworks
** Dojo
    Hello World
    Widgets
    Ressources
** jQuery
** Node.js
** React.js
* Tests
** Ava
** Jest
** Cypress
* Débogage
* Erreurs connues
* Références
* Introduction
    Programmer en deux minutes
*   * Page wiki
*   * Compteur en temps réel
*   * Site dans un document
* Outils de développement
* Syntaxe
** Ligne d'instruction
** Ordre d'évaluation
** Bloc d'instructions
** Identificateurs
** Expression littérale
** Commentaire
** Mots réservés
** Variables
** Opérateurs
** Structures de contrôle
** Exceptions et erreurs
** Fonctions utilisateur
** Évènement
* Objets prédéfinis
** window
** document
** navigator
** Array
** Boolean
** Date
** Error
** Function
** Math
** Number
** Object
** String
** Element
** RegExp
* Fonctions prédéfinies
* Programmation avancée
** Opérateurs de bits
** Fermeture
** Programmation objet
** Notation JSON
** AJAX
** Stockage
** Générateurs
** Interface DOM
** Objets Microsoft
* Frameworks
** Dojo
    Hello World
    Widgets
    Ressources
** jQuery
** Node.js
** React.js
* Tests
** Ava
** Jest
** Cypress
* Débogage
* Erreurs connues
* Références
[ Modifier le sommaire ]
Apparus en JS avec ES6 en 2013, les générateurs permettent de retourner un grand volume de données sans surcharger la rame, en la découpant en petits paquets.
En deux mots, on les utilise en remplaçant return par yield. Mais il faut aussi créer une fonction générateur, annotée avec un astérisque, pour suivre le patron de conception "Itérateur".

## Références

* ↑ MDN: Generator function