From mboxrd@z Thu Jan 1 00:00:00 1970 Received: by margaux.inria.fr, Wed, 27 Jan 93 11:45:41 +0100 Received: from cardhu.inria.fr by margaux.inria.fr, Tue, 26 Jan 93 10:33:56 +0100 Received: by cardhu.inria.fr (4.1/client.23-May-91) id AA18765; Tue, 26 Jan 93 10:32:02 +0100 Date: Tue, 26 Jan 93 10:32:02 +0100 Message-Id: <9301260932.AA18765@cardhu.inria.fr> Organization: INRIA, BP 105, F-78153 Le Chesnay Cedex, France tel. +33(1)39-63-56-05, telex 697033 F, FAX +33(1)39-63-53-30 From: Martin Jourdan Sender: weis@margaux To: caml-list@margaux 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 = : ('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 = : ('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