Limitations du filtrage

From: Valentin Bonnard (p6inf533@maya.cicrp.jussieu.fr)
Date: Wed Jan 29 1997 - 17:33:18 MET


Message-Id: <32EF7BCE.280C996C@maya.cicrp.jussieu.fr>
Date: Wed, 29 Jan 1997 17:33:18 +0100
From: Valentin Bonnard <p6inf533@maya.cicrp.jussieu.fr>
To: caml-list@inria.fr
Subject: Limitations du filtrage

J'ai essaye' ce programme avec caml-light:

let x = 4;;
let f = fun x -> true
          | _ -> false;;

Je voulais faire une fonction qui teste si son
argument vaut 4.

A ma grande surprise cela n'a pas fonctioner puisque
caml-light interprete cela comme:

let f = fun _ -> true
          | _ -> false;;

Cela implique qu'il n'est pas possible de de'finir
de vraies constantes symboliques dans le langage.

De meme

let f = fun 2+2 -> true
          | _ -> false;;

n'est pas accepte'.

On ne peut pas introduire de variable valant 2+2;
comment faire si on ne sait pas calculer a la main
2+2 pour faire un filtrage ? (sans utiliser le
when).

De plus:

let rec compare_list = fun
      (x::_) (x::_) -> x
    | (_::l) (_::l') -> compare_list l l'
    | _ _ -> raise No_Common_Elt
;;

Produit le message:
The variable x is bound several times in this pattern.

Bien sur on peut utiliser un when mais le filtrage est
sense' etre une solution elegante et je ne considere pas
le fait d'introduire deux noms de variables pour tester
si elle sont egale comme particulierement elegant.
(J'ai fais du Prolog avant de faire du Caml.)

Il n'est pas non plus possible d'utiliser la meme
variable dans un filtrage avec |

   | 1,x::_ | _,[x] -> une_action_complique'e x

n'est pas accepte'.

Il faut repeter

  | 1,x::_ -> une_action_complique'e x
  | 1,x::_ -> une_action_complique'e x

Qui est lourd est long si une_action_complique'e
est long.

Y a t_il une raison profonde a ces limitations ?

Est-ce que les restrictions minuscules/majuscules
en O'Caml pourraient resoudre le probleme ?

-- 

+-----------------------------------------------+ + Valentin Bonnard + + mailto:bonnardv@pratique.fr + + mailto:p6inf533@ufr-info-p6.cicrp.jussieu.fr + + mailto:p6inf533@maya.cicrp.jussieu.fr + +-----------------------------------------------+



This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:09 MET