condp

Une autre construction intéressante est condp.

Le premier paramètre de condp est une fonction que l'on appellera f. Le second paramètre une valeur que l'on appellera v. condp prend ensuite une série de clauses où une valeur c est associée à un résultat r.

Pour chaque clause de façon séquentielle, condp appellera(f c v) et retournera r si le résultat est vrai.

Ici aussi, il est possible de donner une valeur par défaut si aucune clause ne match. Cela se fait en indiquant simplement en dernier paramètre la valeur par défaut.

Attention, contrairement à cond vu précédemment, condp retournera une exception si aucune clause ne match et qu'aucune valeur par défaut n'est fournie.

Un exemple

(condp = 1
  2 "1 == 2 ?!"
  3 "3 == 1 !"
  "default value")

Ici, on va tout d'abord tester (= 1 2), puis (= 1 3). Vu qu'aucune de ces conditions est vraie, la valeur par défaut default value sera retournée.

Précédent - Suivant -

;; with a matching close
(println (condp = 1
           2 "1 == 2 ?!"
           1 "1 == 1 !"))

;; Another example with an anonymous function.
(println (condp #(= (:foo %1) %2) 10
           {:foo 1} ":foo == 1 ?!"
           {:foo 10} ":foo == 10 !"))

;; without matching clause, default valueo
(println (condp = 1
           2 "1 == 2 ?!"
           3 "3 == 1 !"
           "default value"))

Powered by mcorbin - Available on Github