Version française
Home     About     Download     Resources     Contact us    
Browse thread
[foissott@poly.polytechnique.fr: CAML (X90)]
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Martin Jourdan <jourdan@m...>
Subject: [foissott@poly.polytechnique.fr: CAML (X90)]
L'un des gourous Caml pourrait-il e'clairer ma lanterne et celle de
mon e'le`ve au sujet des focntions a` deux arguments de'finies par
pattern matching (cf. message ci-dessous)?

D'autre part, est-ce que les mots-cle's "fun" et "function" sont
re'ellement strictement e'quivalents?  Il me semble qu'hier je suis
tombe' sur un cas de non-e'quivalence mais je ne me rappelle plus
lequel.

Merci d'avance.

					Martin

P.S.: tout c,a concerne la version 2.6.1.


    Date: Tue, 26 Jan 93 03:00:57 +0100
    From: foissott@poly.polytechnique.fr (foissotte marc)
    To: jourdan@poly.polytechnique.fr
    Subject: CAML (X90)


	    Cher Monsieur Jourdan,
    Voici une petite session sous caml. La deuxieme definition de la
    fonction insere est correcte: visiblement on peut definir une fonction
    a plusieurs arguments (avec fun) en utilisant le pattern-matching,
    mais seul le premier argument doit comporter un pattern! Ou bien c'est
    assez limitatif, ou bien il y a une restriction de syntaxe qui
    m'echappe (ce que j'espere...), et je ne parviens pas a trouver la
    solution dans les manuels. Pourriez vous m'eclairer?
	    Merci d'avance,
	      Marc Foissotte (foissott@poly)

    #
    #(* insere x [1;2;3] = [[x;1;2;3];[1;x;2;3];[1;2;x;3];[1;2;3;x]] *)
    #
    #let rec insere = fun
    #  x [] -> [[x]]
    # |x (h::t) -> (x::h::t)::(map ajoute (insere x t))
    #    where ajoute l = (h::l) ;;
    Warning: 2 partial matches in this phrase
    Warning: 1 unused match case in this phrase
    Value insere = <fun> : ('a -> 'a list -> 'a list list)

    #insere 7 [1;2;3] ;;

    Pattern matching Failed

    #
    #(* insere [1;2;3] x = [[x;1;2;3];[1;x;2;3];[1;2;x;3];[1;2;3;x]] *)
    #
    #let rec insere = fun
    #  [] x -> [[x]]
    # |(h::t) x -> (x::h::t)::(map ajoute (insere t x))
    #    where ajoute l = (h::l) ;;
    Value insere = <fun> : ('a list -> 'a -> 'a list list)

    #insere [1;2;3] 7 ;;
    [[7; 1; 2; 3]; [1; 7; 2; 3]; [1; 2; 7; 3]; [1; 2; 3; 7]] : num list list