Clojure - Macros

Dans n'importe quelle langue, Macrossont utilisés pour générer du code en ligne. Clojure ne fait pas exception et fournit des fonctionnalités de macro simples pour les développeurs. Les macros sont utilisées pour écrire des routines de génération de code, qui fournissent au développeur un moyen puissant d'adapter le langage aux besoins du développeur.

Voici les méthodes disponibles pour les macros.

defmacro

Cette fonction permet de définir votre macro. La macro aura un nom de macro, une liste de paramètres et le corps de la macro.

Syntaxe

Voici la syntaxe.

(defmacro name [params*] body)

Parameters- 'nom' est le nom de la macro. «params» sont les paramètres affectés à la macro. «corps» est le corps de la macro.

Return Value - Aucun.

Exemple

Un exemple sur la façon dont cela est utilisé est montré dans le programme suivant.

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (defmacro Simple []
      (println "Hello"))
   (macroexpand '(Simple)))
(Example)

Production

Le programme ci-dessus produit la sortie suivante.

Hello

À partir du programme ci-dessus, vous pouvez voir que la macro 'Simple' est étendue en ligne à 'println' «Hello». Les macros sont similaires aux fonctions, à la seule différence que les arguments d'un formulaire sont évalués dans le cas des macros.

macro-développer

Ceci est utilisé pour développer une macro et placer le code en ligne dans le programme.

Syntaxe

Voici la syntaxe.

(macroexpand macroname)

Parameters - 'macroname' est le nom de la macro qui doit être développée.

Return Value - La macro développée.

Exemple

Un exemple sur la façon dont cela est utilisé est montré dans le programme suivant.

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (defmacro Simple []
      (println "Hello"))
   (macroexpand '(Simple)))
(Example)

Production

Le programme ci-dessus produit la sortie suivante.

Hello

Macro avec arguments

Les macros peuvent également être utilisées pour prendre des arguments. La macro peut accepter n'importe quel nombre d'arguments. L'exemple suivant montre comment les arguments peuvent être utilisés.

Exemple

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (defmacro Simple [arg]
      (list 2 arg))
   (println (macroexpand '(Simple 2))))
(Example)

L'exemple ci-dessus place un argument dans la macro Simple, puis utilise l'argument pour ajouter une valeur d'argument à une liste.

Production

Le programme ci-dessus produit la sortie suivante.

(2 2)