Version française
Home     About     Download     Resources     Contact us    
Browse thread
Limitations du filtrage
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Valentin Bonnard <p6inf533@m...>
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         +
+-----------------------------------------------+