[foissott@poly.polytechnique.fr: CAML (X90)]

Martin Jourdan (jourdan@minos)
Tue, 26 Jan 93 10:32:02 +0100

Date: Tue, 26 Jan 93 10:32:02 +0100
Message-Id: <9301260932.AA18765@cardhu.inria.fr>
From: Martin Jourdan <jourdan@minos>
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 = <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