c'est du pattern-matching :
(syntaxe caml)
match a with
1|2|3->valeur si oui
| _ -> valeur pour le reste
_ correspond à un joker, il correspond à n'importe quoi.
C'est la première alternative qui correspond qui l'emporte (pas de backtracking, qui est l'apanage des langages logique comme prolog ou cury ).
sinon, avec des combinateurs et des curyfications il doit y avoir moyen de faire quelquechose (un truc approchant les monads) mais je maîtrise pas.
sinon, bien sûr tu peux fair un truc du style :
let rec is_in e l = match l with
| [] -> false
| x::_ when x = e -> true
| _::xs -> is_in e q
mais bon parcourir une liste pour savoir si un élément est dedans ... ça pête pas des briques.
avec un peu de bidouille :
let (||) v (a,r) = (a, if r then r else a=v);;
let test = fun a -> (a,false);;
let result (a, r) = r;;
# result (112||11||(test 10));;
- : bool = false
# result (112||11||(test 11));;
- : bool = true
Y'a d'autres solutions avec des combinateurs mais c'est pas super plus optimisé.