From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id HAA25464; Mon, 12 Nov 2001 07:37:59 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id HAA29088 for ; Mon, 12 Nov 2001 07:37:58 +0100 (MET) Received: from smtprt15.wanadoo.fr (smtprt15.wanadoo.fr [193.252.19.210]) by nez-perce.inria.fr (8.11.1/8.10.0) with ESMTP id fAC6bvH22221 for ; Mon, 12 Nov 2001 07:37:57 +0100 (MET) Received: from citronier.wanadoo.fr (193.252.19.222) by smtprt15.wanadoo.fr; 12 Nov 2001 07:37:57 +0100 Received: from debian (217.109.146.219) by citronier.wanadoo.fr; 12 Nov 2001 07:37:57 +0100 Received: from moi by debian with local (Exim 3.32 #1 (Debian)) id 163AkP-0000fG-00 for ; Mon, 12 Nov 2001 07:39:09 +0100 To: caml-list@inria.fr Subject: Re: [Caml-list] Great Beginner References: <3BEBDDCA.1060307@francetelecom.com> <87hes1tubf.dlv@wanadoo.fr> <005c01c16b0a$3971f860$2d2ce8d4@Utilisateur> From: Remi VANICAT Date: 12 Nov 2001 07:39:09 +0100 In-Reply-To: <005c01c16b0a$3971f860$2d2ce8d4@Utilisateur> Message-ID: <877kswebn6.dlv@wanadoo.fr> User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.1 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk "Diego Olivier Fernandez Pons" writes: > Rémi Vanicat a proposé le code suivant : > > let rec somme n = > if n = 0 then 0 > else n + (somme (n - 1)) > > let somme n = > let rec aux i x = > if i <= n then > aux (i+1) (x + i) > else x in > aux 1 0 > > Ce code reste néanmoins très proche du code impératif. Dans un style > beacoup plus fonctionnel on aura plutôt : > > let rec somme = function > | 0 -> 0 > | k -> k + somme (k-1) > ;; j'ai du mal a voir la différence entre ceci et mon code. le if then else du caml est une construction fonctionnel. [..] > Enfin, je vous recommande de « commenter » votre code par des noms de > variables explicites (comme total ou k plutôt que aux, acc, etc.) ; > cela permet un code immédiatement compréhensible. je vous l'accorde, mais c'est une question d'habitude ici > > La seule remarque supplémentaire que l'on pourrait faire est que dans > les langages fonctionnels on préfère les fonctions à plusieurs > arguments que les fonctions à arguments dans les produits cartésiens > (ce qui ici n'est guère difficile car vous ne faites aucun test sur la > variable total) > > let somme = function n -> > let rec sommeCPS = function total -> function > | 0 -> total > | k -> sommeCPS (total + k) (k - 1) > in > sommeCPS 0 n > ;; et en caml, on préférera (c'est quand même plus lisible) : let somme n = let rec sommeCPS total = function | 0 -> total | k -> sommeCPS (total + k) (k - 1) in somme CPS 0 n les "function" partout ne rajoute absolument rien a la lisibilité, voir même en enlève, l'information importante étant noyé au milieux de nombreux mot clé. -- Rémi Vanicat vanicat@labri.u-bordeaux.fr http://dept-info.labri.u-bordeaux.fr/~vanicat ------------------- Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr