From cdupont at sii.fr Mon Sep 10 06:23:07 2007 From: cdupont at sii.fr (Dupont Corentin) Date: Mon Sep 10 06:13:18 2007 Subject: [Haskell-fr] =?iso-8859-1?q?inf=E9rence?= Message-ID: <18a05e6b0709100323t61926ecbof7373ad456ea86d4@mail.gmail.com> Salut! J'ai besoin d'un peu d'aide... Je d?bute en haskell. J'essai d'?crire un petit programme qui impl?mente les "polyn?mes interpolateurs de Lagrange". Mais ma question est plus g?n?rale, c'est que j'ai souvent du mal avec le moteur d'inf?rence de Haskell. En effet, un coup mon code compile. Ensuite je fait une petite modif sur une ligne et ?a ne compile plus en me levant une erreur sur une partie (apparemment) compl?tement diff?rente du code!! Dans mon exemple j'ai une variable *nombre_points*. C'est clairement un entier. Comment le pr?ciser? Je voudrais aussi l'utiliser dans des divisions. Comment faire? Je pense que c'est le probl?me dans mon exemple ci-dessous. Merci pour votre aide! Corentin PS: Y as t-il un forum en Fran?ais d'entraide? Il me sort une erreur du style: *Lagrange.hs:60:13: No instance for (Fractional Int) arising from use of `us' at Lagrange.hs:60:13-17 Possible fix: add an instance declaration for (Fractional Int) In the second argument of `map', namely `(us (m))' In the expression: map by (us (m)) In the definition of `ys': ys = map by (us (m))* Voici l'exemple: *module Lagrange where nombre_points = 7 -- creation d'une liste exluant i list i = [x | x <- [0..nombre_points-1], x /= i] -- un terme du polyn?me de Lagrange un_terme t j i = (t - i)/(j - i) --produit des termes pour obtenir le polyn?me d'un point les_termes t j = map (un_terme t j) (list j) poly t j = product (les_termes t j) --Si je d?commente les 2 lignes suivantes et que je commente l'autre d?finition de blend ci-dessous, ?a marche: --blend (a,t) = a(0) * (poly t 0) + a(1) * (poly t 1) + a(2) * (poly t 2) + a(3) * (poly t 3) + -- a(4) * (poly t 4) + a(5) * (poly t 5) + a(6) * (poly t 6) --t est le param?tre du polyn?me, a sera la coordonn?e (x ou y). blend_un_point t a numero_point = a(numero_point) * (poly t numero_point) blend_les_points t a = map (blend_un_point t a) [0..6] blend (a,t) = sum (blend_les_points t a) -- Sample points xy = [(-4.0,0.0), (-1.0,1.0), (-3.0,3.0), (0.0,4.0), (3.0,3.0),(1.0,1.0),( 4.0,0.0)] --creation des fonctions x et y x a = fst (xy !! a) y a = snd (xy !! a) -- Blend the sample points for some given u: bx(u) = blend(x,u) by(u) = blend(y,u) -- Take m+1 values for u, from 0 to nombre_points, equally spaced: us(m) = map (/m) [0.0..(7-1)*m] -- For m = 50.0 -- we get us(m)=[0.0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0]. -- Now get a list of points for the above values of the parameter: xs = map bx (us(m))* * ys = map by (us(m)) -- Running this, we get, where I've rounded the results to 2 digits: -- -- xs = [0.00, 0.38, 0.75, 1.1, 1.5, 1.9, 2.3, 2.6, 3.0] -- ys = [0.00, 0.46, 1.00, 1.7, 2.3, 2.8, 3.1, 3.2, 3.0] -- Finally, get a list of pairs (x,y), i.e. a list of points: ps = zip xs ys -- In this example, running "ps" we get, after rounding, the points: -- -- [(0, 0), (0.38, 0.46), (0.75, 1), (1.1, 1.7), -- (1.5, 2.3), (1.9, 2.8), (2.3, 3.1), (2.6, 3.2), (3, 3)] -- -- Now plot lines joining these points to get an approximation of the curve * -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/haskell-fr/attachments/20070910/330ac8e8/attachment.htm From dav.vire+haskell at gmail.com Mon Sep 10 07:11:54 2007 From: dav.vire+haskell at gmail.com (david48) Date: Mon Sep 10 07:02:05 2007 Subject: =?ISO-8859-1?Q?Re:_[Haskell-fr]_inf=E9rence?= In-Reply-To: <18a05e6b0709100323t61926ecbof7373ad456ea86d4@mail.gmail.com> References: <18a05e6b0709100323t61926ecbof7373ad456ea86d4@mail.gmail.com> Message-ID: <4c88418c0709100411kdfa38cdkdc3b769369a85a7e@mail.gmail.com> On 9/10/07, Dupont Corentin wrote: > Salut! > J'ai besoin d'un peu d'aide... > Je d?bute en haskell. J'essai d'?crire un petit programme qui impl?mente les > "polyn?mes interpolateurs de Lagrange". > > Mais ma question est plus g?n?rale, c'est que j'ai souvent du mal avec le > moteur d'inf?rence de Haskell. > En effet, un coup mon code compile. Ensuite je fait une petite modif sur une > ligne et ?a ne compile plus en me levant une erreur sur une partie > (apparemment) compl?tement diff?rente du code!! Ca arrive souvent quand on laisse Haskell deviner tout seul le type des fonctions. Une solution tout simple consiste ? renseigner le type des fonctions, de telle qu'haskell signale de suite quand une signature de fonction ne correspond pas avec le code qu'il voit. Sans la signature, haskell d?termine un type qui est peut ?tre faut pour la fonction, puis signale l'erreur dans une autre fonction qui fait appel ? la premi?re. > Dans mon exemple j'ai une variable nombre_points. C'est clairement un > entier. Comment le pr?ciser? nombre_points :: Int From corentin.dupont at gmail.com Mon Sep 10 07:29:31 2007 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Mon Sep 10 07:19:42 2007 Subject: [Haskell-fr] traduction Message-ID: <18a05e6b0709100429s1d42cb45j8d8fea6b05cafb75@mail.gmail.com> Salut, Je m'adresse particuli?rement ? Gorgonite car tu as d?j? men? un projet de traduction sur Haskell ;) Tu l'as fait seul? As-tu eu de l'aide et comment l'as tu solicit?? Si vous ?tiez plusieurs, as-tu utilis? un outils de travail collaboratif (ie un wiki...)? Bon j'ai d?j? traduit l'intro de "Haskell for C programmers". J'ai obtenu la b?n?diction de l'auteur par mail. Voili voilo a+ Corentin -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/haskell-fr/attachments/20070910/0e7f486d/attachment.htm From eric.kow at gmail.com Mon Sep 10 08:16:25 2007 From: eric.kow at gmail.com (Eric Y. Kow) Date: Mon Sep 10 08:06:41 2007 Subject: [Haskell-fr] =?iso-8859-1?Q?inf=E9renc?= =?iso-8859-1?Q?e?= In-Reply-To: <18a05e6b0709100323t61926ecbof7373ad456ea86d4@mail.gmail.com> References: <18a05e6b0709100323t61926ecbof7373ad456ea86d4@mail.gmail.com> Message-ID: <20070910121625.GB986@dewdrop.local> Salut, > us(m) = map (/m) [0.0..(7-1)*m] Le (/) ne prend que de types qui sont des instances de la classe Fractional (e.g. Double, Float). Comme tu as utilis? un / m, Haskell a inf?r? que m est forcement dans cette classe. Donc si dans une autre fonction tu passe un Int ? us, il y aura un erreur de typage. Je crois que les fonctions fromIntegral ou realToFrac pourraient servir http://www.haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v%3AfromIntegral Peut-?tre ?a sera une bonne id?e de faire us(m) = map (/mf) [0.0..(7-1)*m] where mf = fromInteger m forum ----- Il y a #haskell et #haskell.fr sur irc.freenode.net. La communaut? Haskell a plus tendence a utiliser les listes de diffusion ou IRC que les forums (message boards?) ou Usenet. style ----- Je crois que c'est plus courant de faire us m = ... sans les parenth?ses dans les param?tres Lorsque mes fonctions sont ?externes?, c'est ? dire, pas cach?es dans un 'let' ou un 'where', je pr?f?re exprimer mes intentions explicitement avec une signature de type. Par exemple, us :: Int -> [Float] us m = ... Ou peut-?tre tu voulais une fonction plus generale us :: (Integral a, Fractional b) => a -> [b] us m = ... C'est pratique pour comprendre les erreurs de typage, et aussi comme source de documentation. -- Eric Kow http://www.loria.fr/~kow PGP Key ID: 08AC04F9 Merci de corriger mon fran?ais. -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 186 bytes Desc: not available Url : http://www.haskell.org/pipermail/haskell-fr/attachments/20070910/93dfbe44/attachment-0001.bin From corentin.dupont at gmail.com Mon Sep 10 11:01:41 2007 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Mon Sep 10 10:51:53 2007 Subject: [Haskell-fr] =?iso-8859-1?q?Re=3A_inf=E9rence?= In-Reply-To: <18a05e6b0709100323t61926ecbof7373ad456ea86d4@mail.gmail.com> References: <18a05e6b0709100323t61926ecbof7373ad456ea86d4@mail.gmail.com> Message-ID: <18a05e6b0709100801j46a88487wb41937f5d5cac24d@mail.gmail.com> J'ai tranform? mon programme de la mani?re suivante (voir ci-apr?s). J'ai sp?cifi? le type de la plupart des fonctions. Ca marche mieux, mais l'?criture est s?rieusement plus lourde! J'ai encore un probl?me: courbe = defaultPlotLines { plot_lines_values = [[ (Point a b) | (a,b) <- ps]], plot_lines_style = solidLine lineWidth 0 0 1 } donne l'erreur: Couldn't match expected type `Double' against inferred type `Float' In the first argument of `Point', namely `a' In the expression: (Point a b) In the expression: [(Point a b) | (a, b) <- ps] en effet Point prend des doubles. Je n'ai pas trouv? de fonctions de conversion Float vers Double... Merci! Corentin *module Lagrange where* *nombre_points :: Integer nombre_points = 7* *-- creation d'une liste exluant i list :: Integer -> [Integer] list i = filter (/=i) [0..nombre_points-1] * *-- un terme du polyn?me de Lagrange --un_terme :: Float -> Integer -> Integer -> Float un_terme t j i = (t - i_f)/(j_f - i_f) where i_f = fromInteger i j_f = fromInteger j* *--produit des termes pour obtenir le polyn?me d'un point les_termes t j = map (un_terme t j) (list j) poly t j = product (les_termes t j)* * * *--blend (a,t) = a(0) * (poly t 0) + a(1) * (poly t 1) + a(2) * (poly t 2) + a(3) * (poly t 3) + -- a(4) * (poly t 4) + a(5) * (poly t 5) + a(6) * (poly t 6)* *--t est le param?tre du polyn?me, a sera la coordonn?e (x ou y). blend_un_point :: Float -> (Integer -> Float) -> Integer -> Float blend_un_point t a numero_point = a(numero_point) * (poly t numero_point) blend_les_points t a = map (blend_un_point t a) [0..6]* *blend :: (Integer -> Float, Float) -> Float blend (a,t) = sum (blend_les_points t a)* *-- Sample points xy = [(-4.0,0.0), (-1.0,1.0), (-3.0,3.0), (0.0,4.0), (3.0,3.0),(1.0,1.0),( 4.0,0.0)]* *--creation des fonctions x et y x :: Integer -> Float x pos = fst (xy !! pos_Integer) where pos_Integer = fromInteger(pos) y :: Integer -> Float y pos = snd (xy !! pos_Integer) where pos_Integer = fromInteger(pos)* *-- Blend the sample points for some given u: bx :: Float -> Float bx(u) = blend(x,u)* *by :: Float -> Float by(u) = blend(y,u)* *-- Take m+1 values for u, from 0 to nombre_points, equally spaced: us :: Integer -> [Float] us m = map (/mf) [0..6*mf] where mf = fromInteger m* *-- For* *m = 50* *-- we get us(m)=[0.0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0].* *-- Now get a list of points for the above values of the parameter:* *xs = map bx (us(m)) ys = map by (us(m))* *-- Running this, we get, where I've rounded the results to 2 digits: -- -- xs = [0.00, 0.38, 0.75, 1.1, 1.5, 1.9, 2.3, 2.6, 3.0] -- ys = [0.00, 0.46, 1.00, 1.7, 2.3, 2.8, 3.1, 3.2, 3.0]* *-- Finally, get a list of pairs (x,y), i.e. a list of points:* *ps = zip xs ys* *-- In this example, running "ps" we get, after rounding, the points: -- -- [(0, 0), (0.38, 0.46), (0.75, 1), (1.1, 1.7), -- (1.5, 2.3), (1.9, 2.8), (2.3, 3.1), (2.6, 3.2), (3, 3)] -- -- Now plot lines joining these points to get an approximation of the curve * -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/haskell-fr/attachments/20070910/a44a8fc7/attachment.htm From gorgonite at freesurf.fr Mon Sep 10 11:46:12 2007 From: gorgonite at freesurf.fr (Gorgonite) Date: Mon Sep 10 11:36:22 2007 Subject: [Haskell-fr] traduction In-Reply-To: <18a05e6b0709100429s1d42cb45j8d8fea6b05cafb75@mail.gmail.com> References: <18a05e6b0709100429s1d42cb45j8d8fea6b05cafb75@mail.gmail.com> Message-ID: <46752.82.67.244.132.1189439172.squirrel@arlette.freesurf.fr> Salut, > Tu l'as fait seul? As-tu eu de l'aide et comment l'as tu solicit?? Si > vous ?tiez plusieurs, as-tu utilis? un outils de travail collaboratif > (ie un wiki...)? Pour r?sumer, j'ai commenc? seul par la partie sur les monades, car je voulais en savoir plus sur ce sujet... j'ai alors propos? de continuer sur un forum de d?veloppement auquel je participe (developpez.com), et quelques personnes semblaient int?ress?es. Au final, je n'ai eu qu'un seul autre contributeur, mais ?normement de relecteurs (qui parfois ne comprenaient pas trop... mais qui ont permis d'avoir une "copie" sans faute d'orthographe ;-) ) J'utilisais directement un gabarit XML que l'on utilise sur ce site, mais tutux (je ne connais que son pseudo :'( ) utilisait le m?me format que pour la traduction et me faisait parvenir ces parties pour que je les passe au gabarit. C'?tait assez rapide, mais la relecture est parfois longue. En revanche, s'il y a plus de contributeurs, je pense qu'il faut soit utiliser un outil du style wiki ou subversion, soit se s?parer les chapitres... j'esp?re avoir r?pondu ? tes questions... cordialement From corentin.dupont at gmail.com Thu Sep 13 08:05:37 2007 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Thu Sep 13 08:05:42 2007 Subject: [Haskell-fr] =?iso-8859-1?q?Re=3A_inf=E9rence?= In-Reply-To: <18a05e6b0709100801j46a88487wb41937f5d5cac24d@mail.gmail.com> References: <18a05e6b0709100323t61926ecbof7373ad456ea86d4@mail.gmail.com> <18a05e6b0709100801j46a88487wb41937f5d5cac24d@mail.gmail.com> Message-ID: <18a05e6b0709130505t41dca98bybebfccd2500fc462@mail.gmail.com> Salut, Personne ne peut me r?pondre sur mon erreur ci-dessous? comment caster de Float en Double? J'ai d'autres questions: Je n'ai pas tr?s bien compris ce que signifie le '. Apparemment ?a a ? voir avec l'imp?ratif... Je ne comprend pas tr?s bien ce que font des op?rateurs comme &&&: (&&&) :: (Arrow a) => a b c -> a b c' -> a b (c, c') Dans la signature, que signifient les espaces entre les a,b,c...? Merci! Corentin On 9/10/07, Dupont Corentin wrote: > > J'ai tranform? mon programme de la mani?re suivante (voir ci-apr?s). > J'ai sp?cifi? le type de la plupart des fonctions. > Ca marche mieux, mais l'?criture est s?rieusement plus lourde! > > J'ai encore un probl?me: > > courbe = defaultPlotLines { > plot_lines_values = [[ (Point a b) | (a,b) <- ps]], > plot_lines_style = solidLine lineWidth 0 0 1 > } > > donne l'erreur: > Couldn't match expected type `Double' against inferred type `Float' > In the first argument of `Point', namely `a' > In the expression: (Point a b) > In the expression: [(Point a b) | (a, b) <- ps] > > en effet Point prend des doubles. Je n'ai pas trouv? de fonctions de > conversion Float vers Double... > > Merci! > Corentin > > > > module Lagrange where > > nombre_points :: Integer > nombre_points = 7 > > -- creation d'une liste exluant i > list :: Integer -> [Integer] > list i = filter (/=i) [0..nombre_points-1] > > -- un terme du polyn?me de Lagrange > --un_terme :: Float -> Integer -> Integer -> Float > un_terme t j i = (t - i_f)/(j_f - i_f) > where i_f = fromInteger i > j_f = fromInteger j > > > --produit des termes pour obtenir le polyn?me d'un point > les_termes t j = map (un_terme t j) (list j) > poly t j = product (les_termes t j) > > > > --blend (a,t) = a(0) * (poly t 0) + a(1) * (poly t 1) + a(2) * (poly t 2) + > a(3) * (poly t 3) + > -- a(4) * (poly t 4) + a(5) * (poly t 5) + a(6) * (poly t 6) > > --t est le param?tre du polyn?me, a sera la coordonn?e (x ou y). > blend_un_point :: Float -> (Integer -> Float) -> Integer -> Float > blend_un_point t a numero_point = a(numero_point) * (poly t numero_point) > blend_les_points t a = map (blend_un_point t a) [0..6] > > blend :: (Integer -> Float, Float) -> Float > blend (a,t) = sum (blend_les_points t a) > > -- Sample points > xy = [(-4.0,0.0), (-1.0,1.0), (-3.0,3.0), (0.0,4.0), > (3.0,3.0),(1.0,1.0),(4.0,0.0)] > > > --creation des fonctions x et y > x :: Integer -> Float > x pos = fst (xy !! pos_Integer) > where pos_Integer = fromInteger(pos) > y :: Integer -> Float > y pos = snd (xy !! pos_Integer) > where pos_Integer = fromInteger(pos) > > > -- Blend the sample points for some given u: > bx :: Float -> Float > bx(u) = blend(x,u) > > by :: Float -> Float > by(u) = blend(y,u) > > -- Take m+1 values for u, from 0 to nombre_points, equally spaced: > us :: Integer -> [Float] > us m = map (/mf) [0..6*mf] > where mf = fromInteger m > > -- For > > m = 50 > > -- we get us(m)=[0.0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0]. > > -- Now get a list of points for the above values of the parameter: > > xs = map bx (us(m)) > ys = map by (us(m)) > > > -- Running this, we get, where I've rounded the results to 2 digits: > -- > -- xs = [0.00, 0.38, 0.75, 1.1, 1.5, 1.9, 2.3, 2.6, 3.0] > -- ys = [0.00, 0.46, 1.00, 1.7, 2.3, 2.8, 3.1, 3.2, 3.0] > > -- Finally, get a list of pairs (x,y), i.e. a list of points: > > ps = zip xs ys > > -- In this example, running "ps" we get, after rounding, the points: > -- > -- [(0, 0), (0.38, 0.46), (0.75, 1), (1.1, 1.7), > -- (1.5, 2.3), (1.9, 2.8), (2.3, 3.1), (2.6, 3.2), (3, 3)] > -- > -- Now plot lines joining these points to get an approximation of the curve > From corentin.dupont at gmail.com Thu Sep 13 08:33:17 2007 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Thu Sep 13 08:33:16 2007 Subject: [Haskell-fr] =?iso-8859-1?q?Re=3A_inf=E9rence?= In-Reply-To: <20070913121216.GA29113@sources.org> References: <18a05e6b0709100323t61926ecbof7373ad456ea86d4@mail.gmail.com> <18a05e6b0709100801j46a88487wb41937f5d5cac24d@mail.gmail.com> <18a05e6b0709130505t41dca98bybebfccd2500fc462@mail.gmail.com> <20070913121216.GA29113@sources.org> Message-ID: <18a05e6b0709130533j4cd1a311xa015ef51d07e0270@mail.gmail.com> On 9/13/07, Stephane Bortzmeyer wrote: > On Thu, Sep 13, 2007 at 02:05:37PM +0200, > Dupont Corentin wrote > a message of 141 lines which said: > > > Dans la signature, que signifient les espaces entre les a,b,c...? > > Ben, en fran?ais, comme en anglais, on met des espaces pour s?parer > les mots. > > f :: a b -> b > > f prend deux arguments de type a et b (pas tr?s courant en Haskell car > pas curryfiable) OK, c'est bien ce que je pense, ?a s'?crit d'habitude comme ?a non? f :: a -> b -> b Forme non curryfi?e: f :: (a,b) -> b C'est pour ?a que la notation avec des espaces me laissait perplexe... En particulier dans l'exemple: (&&&) :: (Arrow a) => a b c -> a b c' -> a b (c, c') > > f :: ab -> b > > f prend un argument de type ab (rare, on utilise toujours des > identificateurs ? une seule lettre). > From eric.kow at gmail.com Thu Sep 13 09:10:35 2007 From: eric.kow at gmail.com (Eric Kow) Date: Thu Sep 13 09:10:35 2007 Subject: =?UTF-8?Q?Re:_[Haskell-fr]_Re:_inf=C3=A9rence?= In-Reply-To: <18a05e6b0709130505t41dca98bybebfccd2500fc462@mail.gmail.com> References: <18a05e6b0709100323t61926ecbof7373ad456ea86d4@mail.gmail.com> <18a05e6b0709100801j46a88487wb41937f5d5cac24d@mail.gmail.com> <18a05e6b0709130505t41dca98bybebfccd2500fc462@mail.gmail.com> Message-ID: <4a0b969d0709130610w2a71c491oc3f323974d0df4d7@mail.gmail.com> On 13/09/2007, Dupont Corentin wrote: > Personne ne peut me r?pondre sur mon erreur ci-dessous? > comment caster de Float en Double? je ne sais pas... peut-?tre realToFrac pour faire une conversion? l'hierarchie des classes dans http://en.wikibooks.org/wiki/Haskell/Class_declarations pourrait ?tre pertinent sinon, tu peux aussi changer tes fonctions pour qu'elles acceptent Double, ou les g?n?raliser: blend_un_point :: Float -> (Integer -> Float) -> Integer -> Float deviendra blend_un_point :: (Fractional a) => (Integer -> a) -> Integer -> a J'ignore la difference entre Fractional, Floating, etc > J'ai d'autres questions: > Je n'ai pas tr?s bien compris ce que signifie le '. o?? de temps en temps, on utilise x' ou foo' comme nom de variable. j'aime pas trop parce que je trouve le ? ' ? pas tr?s visible, mais d'autres programmeurs ont l'air d'apprecier > Je ne comprend pas tr?s bien ce que font des op?rateurs comme &&&: j'utilise les dessins dans http://en.wikibooks.org/wiki/Haskell/Understanding_arrows pour ?a une utilisation de (&&&) de simplifier (f x, g x) en (f &&& g) x par abus de typage, on pourrait dire que (&&&) :: (b -> c) -> (b -> c') -> (b -> (c, c')) c'est ? dire que (&&&) peut prend deux fonctions f et g; et un param?tre x, il appliquera f et g ? x, et renovera le r?sultat dans un tuple. mais en fait, c'est en plus g?neral que ?a > (&&&) :: (Arrow a) => a b c -> a b c' -> a b (c, c') > Dans la signature, que signifient les espaces entre les a,b,c...? Je sais pas comment ?a s'appelle, mais tu as peut-?tre vu que il exist des types qui prennent des param?tres. Par exemple Maybe prend un variable a; donc si je donne Int au type Maybe, j'aurai le type Maybe Int. Either est un autre exemple, il prend deux parametr?s. Ainsi, Either Int Float est un type. Par fois on ?crit des fonctions qui marche avec des variables de types. Par exemple, la fonction fromMaybe :: a -> Maybe a -> a marche pour tous les param?tres qu'on peut donner au type Maybe Dans Haskell, tu peux ?crire qqc encore plus general. Comparons fromMaybe :: a -> Maybe a -> a fromBlah :: (Blah x) => a -> x a -> a fromBlah marche pas seulement avec Maybe, mais avec tous les types ?x? qui sont des instances de la class Blah. De fa?on similaire, (&&&) :: a b c -> a b c' -> a b (c,c') (&&&) marche pour les types ?a? qui sont des instances d'Arrow, pas que pour les fonctions ((->) est un instance de Arrow parmi d'autres) On peut voir que la signature abusive que j'ai donn? est similaire ? la signature ci-dessus en la r?ecrivant: (&&&) :: (b -> c) -> (b -> c') -> (b -> (c, c')) (&&&) :: ((->) b c) -> ((->) b c') -> ((->) b (c, c')) (&&&) :: ((a) b c) -> ((a) b c') -> ((a) b (c,c')) -- je remplace ? -> ? par ? a ? (&&&) :: (a b c) -> (a b c') -> (a b (c,c')) (&&&) :: a b c -> a b c' -> a b (c,c') Si ?a fait un peu bizzare de remplacer ? -> ? par ? a ?, c'est utile de se rappeller que les types commes ? , ? sont des types comme des autres. C'est juste que l? on utilise un op?rateur pour le nom du type (comme on utilise (+) au lieu d'une fonction plus) Donc on pourrait imaginer... fst :: (x,y) -> x fst :: ((,) x y) -> x fstFoo :: (Foo a) => a x y -> x Ne fait pas trop confiance ? mes propos; je suis loin d'?tre expert, et j'ai peut-?tre dit des b?tisses, ou utilis? des abus de langage sans savoir. -- Eric Kow http://www.loria.fr/~kow PGP Key ID: 08AC04F9 Merci de corriger mon fran?ais. From corentin.dupont at gmail.com Thu Sep 13 10:03:05 2007 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Thu Sep 13 10:03:05 2007 Subject: =?ISO-8859-1?Q?Re:_[Haskell-fr]_Re:_inf=E9rence?= In-Reply-To: <4a0b969d0709130610w2a71c491oc3f323974d0df4d7@mail.gmail.com> References: <18a05e6b0709100323t61926ecbof7373ad456ea86d4@mail.gmail.com> <18a05e6b0709100801j46a88487wb41937f5d5cac24d@mail.gmail.com> <18a05e6b0709130505t41dca98bybebfccd2500fc462@mail.gmail.com> <4a0b969d0709130610w2a71c491oc3f323974d0df4d7@mail.gmail.com> Message-ID: <18a05e6b0709130703l39f9a728uc202ab43a70f7938@mail.gmail.com> Merci Beaucoup ?a m'?claire bien! Je ne suis pas encore tr?s ? l'aise avec ces histoires de classes de types, c'est une g?n?ralisation qu'on ne voit pas trop dans les autres languages ;) Si j'ai bien compris, les types sont regroup?s en classe en fonction de leurs propri?t?s. Eq pour les types qui supportent l'?galit? (quel type ne supporte pas l'?galit???) Ord pour les types qu'on peut trier etc. Certains types appartiennent ? plusieurs classes donc? OK, le ' n'est pas un op?rateur mais la virgule , oui! magnifique Il faudra que je regarde cette classe Arrow, elle m'intrigue... Merci encore Je relirais ton message plusieurs fois pour bien imprimer tout ?a ;) Corentin On 9/13/07, Eric Kow wrote: > On 13/09/2007, Dupont Corentin wrote: > > Personne ne peut me r?pondre sur mon erreur ci-dessous? > > comment caster de Float en Double? > > je ne sais pas... peut-?tre realToFrac pour faire une conversion? > l'hierarchie des classes dans > http://en.wikibooks.org/wiki/Haskell/Class_declarations > pourrait ?tre pertinent > > sinon, tu peux aussi changer tes fonctions pour qu'elles acceptent > Double, ou les g?n?raliser: > blend_un_point :: Float -> (Integer -> Float) -> Integer -> Float > deviendra > blend_un_point :: (Fractional a) => (Integer -> a) -> Integer -> a > > J'ignore la difference entre Fractional, Floating, etc > > > J'ai d'autres questions: > > Je n'ai pas tr?s bien compris ce que signifie le '. > > o?? de temps en temps, on utilise x' ou foo' comme nom de variable. > j'aime pas trop parce que je trouve le ? ' ? pas tr?s visible, mais > d'autres programmeurs ont l'air d'apprecier > > > Je ne comprend pas tr?s bien ce que font des op?rateurs comme &&&: > > j'utilise les dessins dans > http://en.wikibooks.org/wiki/Haskell/Understanding_arrows > pour ?a > > une utilisation de (&&&) de simplifier (f x, g x) en (f &&& g) x > > par abus de typage, on pourrait dire que > (&&&) :: (b -> c) -> (b -> c') -> (b -> (c, c')) > c'est ? dire que (&&&) peut prend deux fonctions f et g; et un > param?tre x, il appliquera f et g ? x, et renovera le r?sultat dans un > tuple. > > mais en fait, c'est en plus g?neral que ?a > > > (&&&) :: (Arrow a) => a b c -> a b c' -> a b (c, c') > > Dans la signature, que signifient les espaces entre les a,b,c...? > > Je sais pas comment ?a s'appelle, mais tu as peut-?tre vu que il exist > des types qui prennent des param?tres. Par exemple Maybe prend un > variable a; donc si je donne Int au type Maybe, j'aurai le type Maybe > Int. Either est un autre exemple, il prend deux parametr?s. Ainsi, > Either Int Float est un type. Par fois on ?crit des fonctions qui > marche avec des variables de types. Par exemple, la fonction > fromMaybe :: a -> Maybe a -> a > marche pour tous les param?tres qu'on peut donner au type Maybe > > Dans Haskell, tu peux ?crire qqc encore plus general. Comparons > > fromMaybe :: a -> Maybe a -> a > fromBlah :: (Blah x) => a -> x a -> a > > fromBlah marche pas seulement avec Maybe, mais avec tous les types ?x? > qui sont des instances de la class Blah. De fa?on similaire, > (&&&) :: a b c -> a b c' -> a b (c,c') > (&&&) marche pour les types ?a? qui sont des instances d'Arrow, pas > que pour les fonctions ((->) est un instance de Arrow parmi d'autres) > > On peut voir que la signature abusive que j'ai donn? est similaire ? > la signature ci-dessus en la r?ecrivant: > > (&&&) :: (b -> c) -> (b -> c') -> (b -> (c, c')) > (&&&) :: ((->) b c) -> ((->) b c') -> ((->) b (c, c')) > (&&&) :: ((a) b c) -> ((a) b c') -> ((a) b (c,c')) -- je remplace ? -> > ? par ? a ? > (&&&) :: (a b c) -> (a b c') -> (a b (c,c')) > (&&&) :: a b c -> a b c' -> a b (c,c') > > Si ?a fait un peu bizzare de remplacer ? -> ? par ? a ?, c'est utile > de se rappeller que les types commes ? , ? sont des types comme des > autres. C'est juste que l? on utilise un op?rateur pour le nom du > type (comme on utilise (+) au lieu d'une fonction plus) > > Donc on pourrait imaginer... > > fst :: (x,y) -> x > fst :: ((,) x y) -> x > fstFoo :: (Foo a) => a x y -> x > > Ne fait pas trop confiance ? mes propos; je suis loin d'?tre expert, > et j'ai peut-?tre dit des b?tisses, ou utilis? des abus de langage > sans savoir. > > -- > Eric Kow http://www.loria.fr/~kow > PGP Key ID: 08AC04F9 Merci de corriger mon fran?ais. > > _______________________________________________ > Haskell-fr mailing list > Haskell-fr@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-fr > > From corentin.dupont at gmail.com Thu Sep 13 11:44:38 2007 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Thu Sep 13 11:44:36 2007 Subject: =?ISO-8859-1?Q?Re:_[Haskell-fr]_Re:_inf=E9rence?= In-Reply-To: <18a05e6b0709130703l39f9a728uc202ab43a70f7938@mail.gmail.com> References: <18a05e6b0709100323t61926ecbof7373ad456ea86d4@mail.gmail.com> <18a05e6b0709100801j46a88487wb41937f5d5cac24d@mail.gmail.com> <18a05e6b0709130505t41dca98bybebfccd2500fc462@mail.gmail.com> <4a0b969d0709130610w2a71c491oc3f323974d0df4d7@mail.gmail.com> <18a05e6b0709130703l39f9a728uc202ab43a70f7938@mail.gmail.com> Message-ID: <18a05e6b0709130844u32611333q394b2b1f50d3e33b@mail.gmail.com> J'ai d'autres questions b?tes: - je n'ai pas trouv? d'op?rateur / comme ceci: (/) :: a -> a -> Maybe a Pourtant il me semble que ce serait une bonne utilisation de Maybe pour la division par zero? Egalement je ne comprend pas pourquoi on appel ?a la monade Maybe. Pour moi une monade c'est une encapsulation d'une suite d'op?rations imp?ratives... Or l? je vois le Maybe comme un sorte d'alg?bre sur les types: Maybe a c'est la "somme" de 2 types: "a" ou "rien". N'h?sitez pas ? me dire si je polue la liste, je pose les questions un peu comme elles me viennent ;) Corentin On 9/13/07, Dupont Corentin wrote: > Merci Beaucoup ?a m'?claire bien! > Je ne suis pas encore tr?s ? l'aise avec ces histoires de classes de > types, c'est une g?n?ralisation qu'on ne voit pas trop dans les autres > languages ;) > > Si j'ai bien compris, les types sont regroup?s en classe en fonction > de leurs propri?t?s. > Eq pour les types qui supportent l'?galit? (quel type ne supporte pas > l'?galit???) > Ord pour les types qu'on peut trier etc. > Certains types appartiennent ? plusieurs classes donc? > > > OK, le ' n'est pas un op?rateur > mais la virgule , oui! magnifique > > Il faudra que je regarde cette classe Arrow, elle m'intrigue... > > Merci encore > Je relirais ton message plusieurs fois pour bien imprimer tout ?a ;) > > Corentin > > > On 9/13/07, Eric Kow wrote: > > On 13/09/2007, Dupont Corentin wrote: > > > Personne ne peut me r?pondre sur mon erreur ci-dessous? > > > comment caster de Float en Double? > > > > je ne sais pas... peut-?tre realToFrac pour faire une conversion? > > l'hierarchie des classes dans > > http://en.wikibooks.org/wiki/Haskell/Class_declarations > > pourrait ?tre pertinent > > > > sinon, tu peux aussi changer tes fonctions pour qu'elles acceptent > > Double, ou les g?n?raliser: > > blend_un_point :: Float -> (Integer -> Float) -> Integer -> Float > > deviendra > > blend_un_point :: (Fractional a) => (Integer -> a) -> Integer -> a > > > > J'ignore la difference entre Fractional, Floating, etc > > > > > J'ai d'autres questions: > > > Je n'ai pas tr?s bien compris ce que signifie le '. > > > > o?? de temps en temps, on utilise x' ou foo' comme nom de variable. > > j'aime pas trop parce que je trouve le ? ' ? pas tr?s visible, mais > > d'autres programmeurs ont l'air d'apprecier > > > > > Je ne comprend pas tr?s bien ce que font des op?rateurs comme &&&: > > > > j'utilise les dessins dans > > http://en.wikibooks.org/wiki/Haskell/Understanding_arrows > > pour ?a > > > > une utilisation de (&&&) de simplifier (f x, g x) en (f &&& g) x > > > > par abus de typage, on pourrait dire que > > (&&&) :: (b -> c) -> (b -> c') -> (b -> (c, c')) > > c'est ? dire que (&&&) peut prend deux fonctions f et g; et un > > param?tre x, il appliquera f et g ? x, et renovera le r?sultat dans un > > tuple. > > > > mais en fait, c'est en plus g?neral que ?a > > > > > (&&&) :: (Arrow a) => a b c -> a b c' -> a b (c, c') > > > Dans la signature, que signifient les espaces entre les a,b,c...? > > > > Je sais pas comment ?a s'appelle, mais tu as peut-?tre vu que il exist > > des types qui prennent des param?tres. Par exemple Maybe prend un > > variable a; donc si je donne Int au type Maybe, j'aurai le type Maybe > > Int. Either est un autre exemple, il prend deux parametr?s. Ainsi, > > Either Int Float est un type. Par fois on ?crit des fonctions qui > > marche avec des variables de types. Par exemple, la fonction > > fromMaybe :: a -> Maybe a -> a > > marche pour tous les param?tres qu'on peut donner au type Maybe > > > > Dans Haskell, tu peux ?crire qqc encore plus general. Comparons > > > > fromMaybe :: a -> Maybe a -> a > > fromBlah :: (Blah x) => a -> x a -> a > > > > fromBlah marche pas seulement avec Maybe, mais avec tous les types ?x? > > qui sont des instances de la class Blah. De fa?on similaire, > > (&&&) :: a b c -> a b c' -> a b (c,c') > > (&&&) marche pour les types ?a? qui sont des instances d'Arrow, pas > > que pour les fonctions ((->) est un instance de Arrow parmi d'autres) > > > > On peut voir que la signature abusive que j'ai donn? est similaire ? > > la signature ci-dessus en la r?ecrivant: > > > > (&&&) :: (b -> c) -> (b -> c') -> (b -> (c, c')) > > (&&&) :: ((->) b c) -> ((->) b c') -> ((->) b (c, c')) > > (&&&) :: ((a) b c) -> ((a) b c') -> ((a) b (c,c')) -- je remplace ? -> > > ? par ? a ? > > (&&&) :: (a b c) -> (a b c') -> (a b (c,c')) > > (&&&) :: a b c -> a b c' -> a b (c,c') > > > > Si ?a fait un peu bizzare de remplacer ? -> ? par ? a ?, c'est utile > > de se rappeller que les types commes ? , ? sont des types comme des > > autres. C'est juste que l? on utilise un op?rateur pour le nom du > > type (comme on utilise (+) au lieu d'une fonction plus) > > > > Donc on pourrait imaginer... > > > > fst :: (x,y) -> x > > fst :: ((,) x y) -> x > > fstFoo :: (Foo a) => a x y -> x > > > > Ne fait pas trop confiance ? mes propos; je suis loin d'?tre expert, > > et j'ai peut-?tre dit des b?tisses, ou utilis? des abus de langage > > sans savoir. > > > > -- > > Eric Kow http://www.loria.fr/~kow > > PGP Key ID: 08AC04F9 Merci de corriger mon fran?ais. > > > > _______________________________________________ > > Haskell-fr mailing list > > Haskell-fr@haskell.org > > http://www.haskell.org/mailman/listinfo/haskell-fr > > > > > From chaddai.fouche at gmail.com Thu Sep 13 12:54:22 2007 From: chaddai.fouche at gmail.com (=?ISO-8859-1?Q?Chadda=EF_Fouch=E9?=) Date: Thu Sep 13 12:54:26 2007 Subject: =?ISO-8859-1?Q?Re:_[Haskell-fr]_Re:_inf=E9rence?= In-Reply-To: <18a05e6b0709130844u32611333q394b2b1f50d3e33b@mail.gmail.com> References: <18a05e6b0709100323t61926ecbof7373ad456ea86d4@mail.gmail.com> <18a05e6b0709100801j46a88487wb41937f5d5cac24d@mail.gmail.com> <18a05e6b0709130505t41dca98bybebfccd2500fc462@mail.gmail.com> <4a0b969d0709130610w2a71c491oc3f323974d0df4d7@mail.gmail.com> <18a05e6b0709130703l39f9a728uc202ab43a70f7938@mail.gmail.com> <18a05e6b0709130844u32611333q394b2b1f50d3e33b@mail.gmail.com> Message-ID: Le 13/09/07, Dupont Corentin a ?crit : > J'ai d'autres questions b?tes: > > - je n'ai pas trouv? d'op?rateur / comme ceci: > (/) :: a -> a -> Maybe a > > Pourtant il me semble que ce serait une bonne utilisation de Maybe > pour la division par zero? Ecrit le ? (/) est la division de r?els pour l'instant, mais tu peux ?crire : infixl 5 a 0 = Nothing a b = Just $ a / b Et deviendra ta division "s?re" dont tu parlais. > Egalement je ne comprend pas pourquoi on appel ?a la monade Maybe. > Pour moi une monade c'est une encapsulation d'une suite d'op?rations > imp?ratives... > Or l? je vois le Maybe comme un sorte d'alg?bre sur les types: > Maybe a c'est la "somme" de 2 types: "a" ou "rien". Tout ? fait, Maybe a est un type somme Just a | Nothing, n?anmoins Maybe est un instance de Monad parce que on peut donner un sens aux op?rations monadiques sur le type Maybe (en fait plusieurs, mais celui qui a ?t? choisi c'est :) : Nothing >>= f = Nothing Just a >>= f = f a return a = Just a Qui est assez pratique pour encha?ner un tas d'op?ration susceptible d'?chouer sans devoir g?rer soi-m?me les Maybe, autrement dit : addFromMap s1 s2 m = do a <- lookup s1 m b <- lookup s2 m return a + b renvoie Nothing si s1 ou s2 ne sont pas des cl?s de la Map m, ou Just le r?sultat de l'addition des valeurs correspondantes. (NB : Gr?ce ? l'?valuation paresseuse et la d?finition de >>=, la fonction s'arr?te en fait au premier ?chec et n'?value pas la suite) > N'h?sitez pas ? me dire si je polue la liste, je pose les questions un > peu comme elles me viennent ;) Ne t'inqui?te pas, tes questions sont les bienvenues, n?anmoins tu obtiendrais sans doute des r?ponses plus rapides sur IRC (#haskell@irc.freenode.net). -- Jeda? From chaddai.fouche at gmail.com Thu Sep 13 12:58:55 2007 From: chaddai.fouche at gmail.com (=?ISO-8859-1?Q?Chadda=EF_Fouch=E9?=) Date: Thu Sep 13 12:58:55 2007 Subject: =?ISO-8859-1?Q?Re:_[Haskell-fr]_Re:_inf=E9rence?= In-Reply-To: <18a05e6b0709130844u32611333q394b2b1f50d3e33b@mail.gmail.com> References: <18a05e6b0709100323t61926ecbof7373ad456ea86d4@mail.gmail.com> <18a05e6b0709100801j46a88487wb41937f5d5cac24d@mail.gmail.com> <18a05e6b0709130505t41dca98bybebfccd2500fc462@mail.gmail.com> <4a0b969d0709130610w2a71c491oc3f323974d0df4d7@mail.gmail.com> <18a05e6b0709130703l39f9a728uc202ab43a70f7938@mail.gmail.com> <18a05e6b0709130844u32611333q394b2b1f50d3e33b@mail.gmail.com> Message-ID: Le 13/09/07, Dupont Corentin a ?crit : > Pour moi une monade c'est une encapsulation d'une suite d'op?rations > imp?ratives... Cette d?finition a l'air un peu floue et assez inexacte en d?finitive. Une monade c'est juste un type et des op?rations (>>=) et return sur ce type qui respectent les lois monadiques. Il y a un tas de tutorial sur le net et chacun les pr?sentent ? sa sauce, mais associer "imp?ratif" et monade n'est pas juste, la monade IO introduit effectivement une succession d'op?rations impures comme dans un programme imp?ratif, n?anmoins la plupart des monades ne sont nullement impures. -- Jeda? From westondan at imageworks.com Thu Sep 13 19:11:39 2007 From: westondan at imageworks.com (Dan Weston) Date: Thu Sep 13 19:11:38 2007 Subject: [Haskell-fr] Re: =?ISO-8859-1?Q?inf=E9rence?= In-Reply-To: <18a05e6b0709130844u32611333q394b2b1f50d3e33b@mail.gmail.com> References: <18a05e6b0709100323t61926ecbof7373ad456ea86d4@mail.gmail.com> <18a05e6b0709100801j46a88487wb41937f5d5cac24d@mail.gmail.com> <18a05e6b0709130505t41dca98bybebfccd2500fc462@mail.gmail.com> <4a0b969d0709130610w2a71c491oc3f323974d0df4d7@mail.gmail.com> <18a05e6b0709130703l39f9a728uc202ab43a70f7938@mail.gmail.com> <18a05e6b0709130844u32611333q394b2b1f50d3e33b@mail.gmail.com> Message-ID: <46E9C3AB.30404@imageworks.com> Dupont Corentin wrote: > J'ai d'autres questions b?tes: > > - je n'ai pas trouv? d'op?rateur / comme ceci: > (/) :: a -> a -> Maybe a > > Pourtant il me semble que ce serait une bonne utilisation de Maybe > pour la division par zero? Ta question n'est nullement b?te! La division par z?ro n'est pas ind?finie en Haskell (IEEE), mais plut?t infinie: >Prelude> 3/0 Infinity La plupart du temps ?a correspond ? ce que tu veux (bien que math?matiquement soup?onneux): Prelude> exp (-1/0) 0.0 Prelude> atan (1/0) 1.5707963267948966 Prelude> atan (-1/0) -1.5707963267948966 Le type Double contient l'infini comme valeur tout ? fait respectable (au moins pour les architectures qui supportent le format IEEE), comme prevue dans: class (RealFrac a, Floating a) => RealFloat a where floatRadix :: a -> Integer floatDigits :: a -> Int floatRange :: a -> (Int, Int) decodeFloat :: a -> (Integer, Int) encodeFloat :: Integer -> Int -> a exponent :: a -> Int significand :: a -> a scaleFloat :: Int -> a -> a isNaN :: a -> Bool isInfinite :: a -> Bool isDenormalized :: a -> Bool isNegativeZero :: a -> Bool isIEEE :: a -> Bool atan2 :: a -> a -> a Dan From popavdan at yahoo.com Tue Sep 18 09:02:27 2007 From: popavdan at yahoo.com (Dan Popa) Date: Tue Sep 18 09:02:10 2007 Subject: [Haskell-fr] Re: inférence In-Reply-To: <18a05e6b0709130505t41dca98bybebfccd2500fc462@mail.gmail.com> Message-ID: <776502.554.qm@web36506.mail.mud.yahoo.com> --- Dupont Corentin wrote: 1) > Salut, > > Personne ne peut me r?pondre sur mon erreur > ci-dessous? > comment caster de Float en Double? > If you really need a datatype for a Point you may use something like : Num a => Point a a specifying that: I) a may be every numeric type and II) a point is something which includes 2 pieces of date which belongs to that type a. As a result the system will use the needed kind of points everywhere. 2) > J'ai d'autres questions: > Je n'ai pas tr?s bien compris ce que signifie le '. > Apparemment ?a a ? voir avec l'imp?ratif... Nothing special. It is like _ in other languages. > Je ne comprend pas tr?s bien ce que font des > op?rateurs comme &&&: > (&&&) :: (Arrow a) => a b c -> a b c' -> a b (c, c') Translation: In the hypothesis that a is a type froma a class of types called Arrow then the type of the &&& function (operator) is: a b c -> a b c' -> a b (c, c') Remark: you may presume that a and b are type constructors (like m for monads). So: a b c means: the a type constructor applied to ( b type constructor applied to a data fromthe type c). This is a complex datatype. a b c' means: the a type constructor applied to ( b type constructor applied to a data the type c'). This is a complex datatype. c' may or may not be the same with c. a b (c, c') means: the a type constructor applied to ( b type constructor applied to the pair formed by last c and last c'). This is a complex datatype. c' may or may not be the same with c but both are the previously c and c', now alltogether. (c,c') means: pair made by c and c' > Dans la signature, que signifient les espaces entre > les a,b,c...? Application of the typeconstructor from the left to the datatype from the right. It's something like: a(b(c)) in mathematics. > > Merci! > Corentin You are wellcome ! Dan P.S. Can I use the question rised, for example as examples for my students or by posting them to haskell.org in any language ? Or would you like to translate the explanations in french for Haskell-fr ? ____________________________________________________________________________________ Pinpoint customers who are looking for what you sell. http://searchmarketing.yahoo.com/ From popavdan at yahoo.com Tue Sep 18 09:23:49 2007 From: popavdan at yahoo.com (Dan Popa) Date: Tue Sep 18 09:23:31 2007 Subject: [Haskell-fr] Re: inférence In-Reply-To: <18a05e6b0709130844u32611333q394b2b1f50d3e33b@mail.gmail.com> Message-ID: <218036.91015.qm@web36504.mail.mud.yahoo.com> Salut, c'est encore moi > > Egalement je ne comprend pas pourquoi on appel ?a la > monade Maybe. > Pour moi une monade c'est une encapsulation d'une > suite d'op?rations > imp?ratives... > Or l? je vois le Maybe comme un sorte d'alg?bre sur > les types: > Maybe a c'est la "somme" de 2 types: "a" ou "rien". > About monads: A monad is just an algebraic structure having two neccesary operations: bind (>>=) and return . For an other example the set of real numbers R is a ring having operations like + and * . And 0 and 1 if you need them are also here. But we may want to use the support set of an algebraic structure withaout taking care what this structure is. Somebodi in finance for example don't know anything about rings and other structures but he /she uses numbers from R daily. That's the case of Maybe: The set {Maybe a | a <- any type} U {Nothing} can be seen as a monad BY DEFINING PROPER monadic operations. But we can use only the datatype to represent computable or uncomputable (Nothing) values. Need to use Maybe ? Use it ! It's defined. Dan Popa ____________________________________________________________________________________ Shape Yahoo! in your own image. Join our Network Research Panel today! http://surveylink.yahoo.com/gmrs/yahoo_panel_invite.asp?a=7 From corentin.dupont at gmail.com Thu Sep 20 08:47:19 2007 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Thu Sep 20 08:46:56 2007 Subject: =?ISO-8859-1?Q?Re:_[Haskell-fr]_Re:_inf=E9rence?= In-Reply-To: <776502.554.qm@web36506.mail.mud.yahoo.com> References: <18a05e6b0709130505t41dca98bybebfccd2500fc462@mail.gmail.com> <776502.554.qm@web36506.mail.mud.yahoo.com> Message-ID: <18a05e6b0709200547xc058dbbv8c8abae8079f7dff@mail.gmail.com> BIen sur, tu peut utiliser mes questions ;) Et merci pour les r?ponses! On 9/18/07, Dan Popa wrote: > > --- Dupont Corentin wrote: > > 1) > > Salut, > > > > Personne ne peut me r?pondre sur mon erreur > > ci-dessous? > > comment caster de Float en Double? > > > If you really need a datatype for a Point you may use > something like : > > Num a => Point a a > > specifying that: > I) a may be every numeric type and > II) a point is something which includes 2 pieces of > date which belongs to that type a. > As a result the system will use the needed kind of > points everywhere. > > > 2) > > J'ai d'autres questions: > > Je n'ai pas tr?s bien compris ce que signifie le '. > > Apparemment ?a a ? voir avec l'imp?ratif... > > Nothing special. It is like _ in other languages. > > > Je ne comprend pas tr?s bien ce que font des > > op?rateurs comme &&&: > > (&&&) :: (Arrow a) => a b c -> a b c' -> a b (c, c') > Translation: In the hypothesis that a is a type froma > a class of types called Arrow then the type of the &&& > function (operator) is: a b c -> a b c' -> a b (c, c') > > Remark: you may presume that a and b are type > constructors (like m for monads). > So: > a b c means: the a type constructor applied to ( b > type constructor applied to a data fromthe type c). > This is a complex datatype. > a b c' means: the a type constructor applied to ( b > type constructor applied to a data the type c'). This > is a complex datatype. c' may or may not be the same > with c. > > a b (c, c') means: the a type constructor applied to ( > b type constructor applied to the pair formed by last > c and last c'). This is a complex datatype. c' may or > may not be the same with c but both are the previously > c and c', now alltogether. > > (c,c') means: pair made by c and c' > > > Dans la signature, que signifient les espaces entre > > les a,b,c...? > > Application of the typeconstructor from the left to > the datatype from the right. It's something like: > a(b(c)) in mathematics. > > > > Merci! > > Corentin > > You are wellcome ! > Dan > > P.S. Can I use the question rised, for example as > examples for my students or by posting them to > haskell.org in any language ? > > Or would you like to translate the explanations in > french for Haskell-fr ? > > > > > > ____________________________________________________________________________________ > Pinpoint customers who are looking for what you sell. > http://searchmarketing.yahoo.com/ > From corentin.dupont at gmail.com Thu Sep 20 08:55:28 2007 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Thu Sep 20 08:55:07 2007 Subject: =?WINDOWS-1252?Q?Re:_[Haskell-fr]_Re:_inf=E9rence?= In-Reply-To: <218036.91015.qm@web36504.mail.mud.yahoo.com> References: <18a05e6b0709130844u32611333q394b2b1f50d3e33b@mail.gmail.com> <218036.91015.qm@web36504.mail.mud.yahoo.com> Message-ID: <18a05e6b0709200555q247130d2ofaff3d913ba995d1@mail.gmail.com> Pour ma soci?t?, j'ai ?crit une petite introduction ? Haskell. Vos critiques sont les bienvenues. Je vous la fait lire: Titre : Pr?sentation du langage Haskell Salut ? tous ! Je me suis int?ress? (? titre personnel) r?cemment ? un nouveau langage de programmation g?n?raliste : Haskell. L'article est ? classer dans la cat?gorie ? R&D ? : Malgr? tous les concepts int?ressants qu'il introduit, il est encore peu utilis? dans le monde industriel. Mais il vaut le d?tour !! Haskell est un langage r?cent (moins d'une dizaine d'ann?es). Quelques stats pour vous donner envie de lire la suite : - 10 fois moins de lignes de code qu'en C - Grande expressivit?. - Compr?hension, maintenabilit? largement accrue. C'est un langage bas? sur une th?orie math?matique (la th?orie de cat?gories). Ce langage est ? fonctionnel pur ?, par opposition aux langages ? imp?ratifs ?, dont font parties tous les langages les plus connus (C, C++, Ada, Java, Pascal?). Cela induit un mode de programmation radicalement diff?rent ! Haskell est : - paresseux - pleinement fonctionnel - fortement typ?, et supporte l'inf?rence de type Haskell est effectivement paresseux, mais ce n'est pas p?joratif ! Cela signifie qu'il n'?value pas une expression si ce n'est pas n?cessaire. Si le r?sultat d'un calcul n'est pas utilis? dans la suite du programme, il n'est pas ?valu?. Cela induit un gain ?vident en terme de temps de traitement. Cela am?liore aussi le design des programmes puisque cela d?charge le programmeur de coder certaines optimisations, pour se concentrer sur le m?tier de son logiciel. Mais surtout, cela permet de faire certaines abstractions tr?s int?ressantes : comme par exemple des structures de donn?es de taille infinie. En Haskell il est tout ? fait possible de d?clarer un ? tableau ? de taille infinie, par exemple un tableau contenant tous les ?l?ments de la suite de Fibonacci ! Bien s?r vous choisirez de n'afficher que les n premiers ?l?ments, et Haskell d?cidera de ne calculer que ceux l?. (Voir l'exemple faramineux de wikipedia?) Ensuite Haskell est pleinement fonctionnel : les fonctions sont des objets de ? 1ere classe ?. Cela signifie que les fonctions peuvent ?tre trait?es comme des variables. Donc une fonction peut ?tre pass?e en param?tre ? une autre fonction, r?cup?r?e en param?tre de retour etc. Haskell supporte les fonctions anonymes et les fonctions ? lambda ?. Cela permet par exemple de d?crire une fonction (simple) dans la zone de param?tres d'une autre fonction. Un bon exemple vaut mieux qu'un long discours : map (+1) [1..10] map est une fonction ? 2 arguments : une fonction et une liste (ici [1..10]). Comme on peut s'y attendre, map applique la fonction ? tous les ?l?ments de la liste et retourne une liste r?sultante. Mais mais mais ??? ? (+1) ? c'est une fonction ? Eh bien oui, c'est une fonction anonyme (je ne l'ai pas d?clar?e avec un petit nom). Et la fonction ? + ? prend bien 2 arguments ? Je n'en voit qu'un (le 1 dans l'exemple)? Il s'agit du m?canisme d' ? ?valuation partielle ? de Haskell. Si vous avez une fonction de 2 param?tres et que vous fournissez les 2 param?tres, super. Mais si vous ne fournissez qu'un param?tre, le r?sultat de l'op?ration sera? Une fonction bien sur ! Une fonction de l'autre param?tre. Et cette fonction ? un param?tre est ce qu'attend la fonction map. Alors, quel est le r?sultat de cette ligne de code ? ;) Haskell supporte la curryfication. Cette op?ration, du nom de son inventeur, est ? la base d'Haskell. D'ailleurs, devinez le pr?nom de ce Mr Curry? Haskell bien sur !! Il existe bien s?r une alg?bre sur les fonctions : l'addition, la composition? Vous pouvez donc d?finir une fonction en une ligne par simple composition de deux autres fonctions ? l'aide de l'op?rateur rond ? ? ?. Ce qui rend les choses assez lisible : dans un gros programme les fonctionnalit?s de haut niveau sont souvent cass?s en plusieurs fonctions plus simple. Une fois d?finis les fonctions simples, vous les ressemblez en une ligne avec l'op?rateur rond. Haskell est statiquement et fortement typ?. Le syst?me de typage est tr?s ?volu?, et vous ?vitera de nombreuses erreurs de programmation. Je termine par le plus dur : Haskell est un langage fonctionnel ? pure ?. Cela signifie qu'il n'y a aucuns effets de bords, et donc qu'il ne supporte pas l'affectation. Par exemple dans un programme en C, je pourrais avoir l'instruction suivante : a = f + g f et g sont des fonction, a un entier. Dans le cadre d'un refactoring, je pourrais ?tre amen? ? vouloir ?crire : a = g + f Eh bien ce n'est ? priori pas possible car en C comme dans d'autres langages, les fonctions ont des effets de bord : f peut modifier le contexte qui sera utilis? par g. En Haskell, le retour d'une fonction d?pend uniquement de ses param?tres, de rien d'autre. Si vous l'appelez ? n'importe quel moment avec les m?mes param?tres, le r?sultat sera le m?me. Cela donne une tr?s grande plasticit? et maintenabilit? au programme. Tout devient plus clair ! Mais il faut reconna?tre que les programmes sont plus difficiles ? ?crire. Cette aspect ? pas d'affectation ? ouvre la porte ? de nombreuses fonctionnalit?s impossible sans, dont la paresse. A noter aussi que comme cons?quence, l'ordre des instructions n'a pas d'importance? Haskell est uniquement d?claratif. Haskell int?gre aussi de nombreuses autres fonctionnalit?s que je n'ai malheureusement pas le temps de d?velopper ici, dont : - la compr?hension de listes - le pattern matching pour les param?tres - les monades et les classes de types? R?f?rences : www.haskell.org http://en.wikipedia.org/wiki/Haskell_(programming_language) Ouvrages de r?f?rence : Yet Another Haskell Tutorial A Gentle Introduction to Haskell Contrairement ? ce que son nom indique, ce dernier ouvrage n'est pas gentil du tout, commencez plut?t par : Haskell for C Programmers From corentin.dupont at gmail.com Thu Sep 20 10:55:18 2007 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Thu Sep 20 10:54:54 2007 Subject: [Haskell-fr] _ Message-ID: <18a05e6b0709200755o70ef57c7n225d31ec63b885d7@mail.gmail.com> Salut, est-ce que vous auriez quelques exemples de l'utilisation des symboles _ et []? C'est utilis? dans le cadre du pattern matching, mais j'ai du mal avec le _... a+ Corentin From nanardon at nanardon.zarb.org Thu Sep 20 11:05:51 2007 From: nanardon at nanardon.zarb.org (Olivier Thauvin) Date: Thu Sep 20 11:05:28 2007 Subject: [Haskell-fr] _ In-Reply-To: <18a05e6b0709200755o70ef57c7n225d31ec63b885d7@mail.gmail.com> References: <18a05e6b0709200755o70ef57c7n225d31ec63b885d7@mail.gmail.com> Message-ID: <200709201705.51899.nanardon@nanardon.zarb.org> Le jeudi 20 septembre 2007, Dupont Corentin a ?crit : > Salut, > est-ce que vous auriez quelques exemples de l'utilisation des symboles _ et > []? C'est utilis? dans le cadre du pattern matching, mais j'ai du mal avec > le _... vrai :: Integer -> Bool vrai 0 = False vrai _ = True ce qui reviens ? ?crire en fonctionnel: Bool vrai (Integer variable) { if (variable == 0) { return False } else { return True } } On peut faire pareil sur des listes: vide :: [a] -> Bool vide [] = True vide (_) = False Sauf typo de ma part dans le code. Voici un exemple de code qui compile: myfilter :: [String] -> [String] myfilter [] = [] myfilter (x:xs) = case x of '#':_ -> myfilter(xs) otherwise -> x:myfilter(xs) Qui vire la fin des lignes d?s qu'un '#' est rencontr?. Cordialement. (J'ai bien compris que ?a, alors j'en profite !) -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: This is a digitally signed message part. Url : http://www.haskell.org/pipermail/haskell-fr/attachments/20070920/511f7ae7/attachment.bin From westondan at imageworks.com Thu Sep 20 16:31:46 2007 From: westondan at imageworks.com (Dan Weston) Date: Thu Sep 20 16:31:29 2007 Subject: [Haskell-fr] Re: =?windows-1252?Q?inf=E9rence?= In-Reply-To: <18a05e6b0709200555q247130d2ofaff3d913ba995d1@mail.gmail.com> References: <18a05e6b0709130844u32611333q394b2b1f50d3e33b@mail.gmail.com> <218036.91015.qm@web36504.mail.mud.yahoo.com> <18a05e6b0709200555q247130d2ofaff3d913ba995d1@mail.gmail.com> Message-ID: <46F2D8B2.5090605@imageworks.com> J'offre les quelques petites suggestions ci-dessous avec la pr?caution que le fran?ais n'est pas ma langue maternelle (ni Haskell non plus!) Dan Weston Dupont Corentin wrote: > Pour ma soci?t?, j'ai ?crit une petite introduction ? Haskell. > Vos critiques sont les bienvenues. > Je vous la fait lire: > > > Titre : Pr?sentation du langage Haskell > > Salut ? tous ! > > Je me suis int?ress? (? titre personnel) r?cemment ? un nouveau > langage de programmation g?n?raliste : Haskell. > > L'article est ? classer dans la cat?gorie ? R&D ? : > Malgr? tous les concepts int?ressants qu'il introduit, il est encore > peu utilis? dans le monde industriel mais jouit d'une croissance acc?l?rante d'utilisation, ce qui promet un r?le de plus en plus important dans l'avenir. > . Mais il vaut le d?tour !! > Haskell est un langage r?cent (moins d'une dizaine d'ann?es). > > Quelques stats pour vous donner envie de lire la suite : > - 10 fois moins de lignes de code qu'en C > - Grande expressivit?. > - Compr?hension, maintenabilit? largement accrue. > > C'est un langage bas? sur une th?orie math?matique (la th?orie de > cat?gories). Ce langage est ? fonctionnel pur ?, par opposition aux > langages ? imp?ratifs ?, dont font parties tous les langages les plus > connus (C, C++, Ada, Java, Pascal?). > Cela induit un mode de programmation radicalement diff?rent ! > > Haskell est : > > - paresseux > - pleinement fonctionnel > - fortement typ?, et supporte l'inf?rence de type > > Haskell est effectivement paresseux, mais ce n'est pas p?joratif ! > Cela signifie qu'il n'?value pas une expression si ce n'est pas > n?cessaire. Si le r?sultat d'un calcul n'est pas utilis? dans la suite > du programme, il n'est pas ?valu?. En revanche, gr?ce ? la transparence r?f?rentielle, le r?sultat d'une expression une fois ?valu?e peut ?tre m?moiz? (http://fr.wikipedia.org/wiki/M%C3%A9moization) et r?utilis? ailleurs, ?vitant le co?t de calculs redondants. > Cela induit un gain ?vident en terme de temps de traitement. > Cela am?liore aussi le design des programmes puisque cela d?charge le > programmeur de coder certaines optimisations, pour se concentrer sur > le m?tier de son logiciel. > > Mais surtout, cela permet de faire certaines abstractions tr?s > int?ressantes : comme par exemple des structures de donn?es de taille > infinie. > En Haskell il est tout ? fait possible de d?clarer un ? tableau ? de > taille infinie, par exemple un tableau contenant tous les ?l?ments de > la suite de Fibonacci ! > Bien s?r vous choisirez de n'afficher que les n premiers ?l?ments, et > Haskell d?cidera de ne calculer que ceux l?. (Voir l'exemple > faramineux de wikipedia?) > > > Ensuite Haskell est pleinement fonctionnel : les fonctions sont des > objets de ? 1ere classe ?. > Cela signifie que les fonctions peuvent ?tre trait?es comme des > variables. Donc une fonction peut ?tre pass?e en param?tre ? une autre > fonction, r?cup?r?e en param?tre de retour etc. > > Haskell supporte les fonctions anonymes et les fonctions ? lambda ?. > Cela permet par exemple de d?crire une fonction (simple) dans la zone > de param?tres d'une autre fonction. > Un bon exemple vaut mieux qu'un long discours : > > map (+1) [1..10] > > map est une fonction ? 2 arguments : une fonction et une liste (ici > [1..10]). Comme on peut s'y attendre, map applique la fonction ? tous > les ?l?ments de la liste et retourne une liste r?sultante. > Mais mais mais ??? ? (+1) ? c'est une fonction ? Eh bien oui, c'est > une fonction anonyme (je ne l'ai pas d?clar?e avec un petit nom). > > Et la fonction ? + ? prend bien 2 arguments ? Je n'en voit qu'un (le 1 > dans l'exemple)? Il s'agit du m?canisme d' ? ?valuation partielle ? de > Haskell. Si vous avez une fonction de 2 param?tres et que vous > fournissez les 2 param?tres, super. > Mais si vous ne fournissez qu'un param?tre, le r?sultat de l'op?ration > sera? Une fonction bien sur ! Une fonction de l'autre param?tre. > Et cette fonction ? un param?tre est ce qu'attend la fonction map. > Alors, quel est le r?sultat de cette ligne de code ? ;) > > Haskell supporte la curryfication. Cette op?ration, du nom de son > inventeur, est ? la base d'Haskell. D'ailleurs, devinez le pr?nom de > ce Mr Curry? Haskell bien sur !! > > Il existe bien s?r une alg?bre sur les fonctions : l'addition, la composition? et la multiplication qui facilitent un style de programmation "point-free" [avec exemple?] [Mais la somme et le produit cat?goriques de fonctions sont un peu complex pour cette introduction, peut-?tre qu'il vaut mieux omettre mention de l'addition enti?rement.] > Vous pouvez donc d?finir une fonction en une ligne par simple > composition de [omis: deux autres] > fonctions ? l'aide de l'op?rateur rond ? ? > ?. Ce qui rend les choses assez lisible : dans un gros programme les > fonctionnalit?s de haut niveau sont souvent cass?s en plusieurs > fonctions plus simple. Une fois d?finis les fonctions simples, vous > les ressemblez en une ligne avec l'op?rateur rond. La composition de fonctions ?tant toujours associative, on n'a m?me pas besoin de parenth?ses. > Haskell est statiquement et fortement typ?. Le syst?me de typage est > tr?s ?volu?, et vous ?vitera de nombreuses erreurs de programmation. > > Je termine par le plus dur : > Haskell est un langage fonctionnel ? pure ?. > Cela signifie qu'il n'y a aucuns effets de bords, et donc qu'il ne > supporte pas l'affectation. > > Par exemple dans un programme en C, je pourrais avoir l'instruction suivante : > > a = f + g > > f et g sont des fonction, a un entier. > Dans le cadre d'un refactoring, je pourrais ?tre amen? ? vouloir ?crire : > > a = g + f > > Eh bien ce n'est ? priori pas possible car en C comme dans d'autres > langages, les fonctions ont des effets de bord : f peut modifier le > contexte qui sera utilis? par g. > > En Haskell, le retour d'une fonction d?pend uniquement de ses > param?tres, de rien d'autre. > Si vous l'appelez ? n'importe quel moment avec les m?mes param?tres, > le r?sultat sera le m?me. > Cela donne une tr?s grande plasticit? et maintenabilit? au programme. > Tout devient plus clair ! > Mais il faut reconna?tre que les programmes sont plus difficiles ? ?crire. > > Cette aspect ? pas d'affectation ? ouvre la porte ? de nombreuses > fonctionnalit?s impossible sans, dont la paresse. > A noter aussi que comme cons?quence, l'ordre des instructions n'a pas > d'importance? Haskell est uniquement d?claratif. Les b?n?fices d'un langage sans effects de bord ne peuvent que s'accro?tre avec l'arriv?e des CPUs multiprocesseurs modernes. > Haskell int?gre aussi de nombreuses autres fonctionnalit?s que je n'ai > malheureusement pas le temps de d?velopper ici, dont : > - la compr?hension de listes > - le pattern matching pour les param?tres > - les monades et les classes de types? > > > > R?f?rences : > www.haskell.org > http://en.wikipedia.org/wiki/Haskell_(programming_language) > > Ouvrages de r?f?rence : > Yet Another Haskell Tutorial > A Gentle Introduction to Haskell > > Contrairement ? ce que son nom indique, ce dernier ouvrage n'est pas > gentil du tout, commencez plut?t par : > Haskell for C Programmers > _______________________________________________ > Haskell-fr mailing list > Haskell-fr@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-fr > > From corentin.dupont at gmail.com Thu Sep 20 16:35:59 2007 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Thu Sep 20 16:35:34 2007 Subject: [Haskell-fr] _ In-Reply-To: <200709201705.51899.nanardon@nanardon.zarb.org> References: <18a05e6b0709200755o70ef57c7n225d31ec63b885d7@mail.gmail.com> <200709201705.51899.nanardon@nanardon.zarb.org> Message-ID: <18a05e6b0709201335y526d8c1s9215f8c3717b018b@mail.gmail.com> En fait je suis venu ? Haskell en faisant des recherches sur le refactoring de programmes. Etant informaticien, j'ai toujours trouv? que les programmes ne sont pas assez "plastiques". Les modifier est ardus, se fait ? la main et est souvent aussi long que de red?velloper l'application. Il me semble aussi que le coup d'ajout d'une fonctionnalit? dans un programme (en C par exemple) d?pend fortement de la taille de ce programme... L'ajout d'une fonctionnalit? A dans un programme de petite taille coute tant, l'ajout de cette m?me fonctionnalit? dans un gros programme est... Beaucoup plus cher. Et ce n'est m?me pas garantie que ce soit lin?aire... Il arrive que certains logiciels ?normes dans mon milieu professionel deviennent des "chateaux de cartes" et le cout d'une nouvelle fonctionnalit? devient prohibitif!!! Ce qui m'int?rresse est le refactoring automatique, ou du moins assist?. Avez-vous connaissance de tels outils? Il m'a sembl? que Haskell, avec sa transparence r?f?rentiel, est un bon candidat au refactoring automatique... Et qui dit refactoring dit analyse et pr?hension du programme dans son ensemble... J'imagine un logiciel qui donne une vue graphique d'ensemble de votre programme. Avec masquage des d?tails selon le niveau de "zoom"... Afin de distinguer du premier coup d'oeil les grandes fonctionnalit?es symbolis?es par des boites et leurs articulations. Est-ce utopique? J'imagine aussi pouvoir "refactorer" mon programme de fa?on enti?rement graphique, en d?pla?ant les liaisons entre les boites... From westondan at imageworks.com Thu Sep 20 16:40:31 2007 From: westondan at imageworks.com (Dan Weston) Date: Thu Sep 20 16:40:23 2007 Subject: [Haskell-fr] _ In-Reply-To: <18a05e6b0709201335y526d8c1s9215f8c3717b018b@mail.gmail.com> References: <18a05e6b0709200755o70ef57c7n225d31ec63b885d7@mail.gmail.com> <200709201705.51899.nanardon@nanardon.zarb.org> <18a05e6b0709201335y526d8c1s9215f8c3717b018b@mail.gmail.com> Message-ID: <46F2DABF.60808@imageworks.com> http://www.haskell.org/haskellwiki/Applications_and_libraries/Program_development#Program_Transformation Dupont Corentin wrote: > En fait je suis venu ? Haskell en faisant des recherches sur le > refactoring de programmes. > > Etant informaticien, j'ai toujours trouv? que les programmes ne sont > pas assez "plastiques". > Les modifier est ardus, se fait ? la main et est souvent aussi long > que de red?velloper l'application. > Il me semble aussi que le coup d'ajout d'une fonctionnalit? dans un > programme (en C par exemple) d?pend fortement de la taille de ce > programme... > L'ajout d'une fonctionnalit? A dans un programme de petite taille > coute tant, l'ajout de cette m?me fonctionnalit? dans un gros > programme est... Beaucoup plus cher. > Et ce n'est m?me pas garantie que ce soit lin?aire... > Il arrive que certains logiciels ?normes dans mon milieu professionel > deviennent des "chateaux de cartes" et le cout d'une nouvelle > fonctionnalit? devient prohibitif!!! > > > Ce qui m'int?rresse est le refactoring automatique, ou du moins > assist?. Avez-vous connaissance de tels outils? > Il m'a sembl? que Haskell, avec sa transparence r?f?rentiel, est un > bon candidat au refactoring automatique... > > Et qui dit refactoring dit analyse et pr?hension du programme dans son > ensemble... > J'imagine un logiciel qui donne une vue graphique d'ensemble de votre > programme. > Avec masquage des d?tails selon le niveau de "zoom"... Afin de > distinguer du premier coup d'oeil les grandes fonctionnalit?es > symbolis?es par des boites et leurs articulations. > Est-ce utopique? > J'imagine aussi pouvoir "refactorer" mon programme de fa?on > enti?rement graphique, en d?pla?ant les liaisons entre les boites... > _______________________________________________ > Haskell-fr mailing list > Haskell-fr@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-fr > > From corentin.dupont at gmail.com Thu Sep 20 16:41:58 2007 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Thu Sep 20 16:41:34 2007 Subject: [Haskell-fr] _ In-Reply-To: <200709201705.51899.nanardon@nanardon.zarb.org> References: <18a05e6b0709200755o70ef57c7n225d31ec63b885d7@mail.gmail.com> <200709201705.51899.nanardon@nanardon.zarb.org> Message-ID: <18a05e6b0709201341i67605f80wad6ffa05e1f987a6@mail.gmail.com> On 9/20/07, Olivier Thauvin wrote: > Le jeudi 20 septembre 2007, Dupont Corentin a ?crit : > > Salut, > > est-ce que vous auriez quelques exemples de l'utilisation des symboles _ et > > []? C'est utilis? dans le cadre du pattern matching, mais j'ai du mal avec > > le _... > > vrai :: Integer -> Bool > vrai 0 = False > vrai _ = True > > ce qui reviens ? ?crire en fonctionnel: > > Bool vrai (Integer variable) { > if (variable == 0) { return False } > else { return True } > } > > On peut faire pareil sur des listes: > > vide :: [a] -> Bool > vide [] = True > vide (_) = False > > Sauf typo de ma part dans le code. > > Voici un exemple de code qui compile: > > myfilter :: [String] -> [String] > myfilter [] = [] > myfilter (x:xs) = > case x of > '#':_ -> myfilter(xs) > otherwise -> x:myfilter(xs) Dans ton exemple je ne comprend pas, le x est bien un seul carat?re? comment peut-il matcher avec '#':_ qui est me semble t-il une chaine? > > Qui vire la fin des lignes d?s qu'un '#' est rencontr?. > > Cordialement. > > (J'ai bien compris que ?a, alors j'en profite !) > > _______________________________________________ > Haskell-fr mailing list > Haskell-fr@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-fr > > > From corentin.dupont at gmail.com Thu Sep 20 16:44:07 2007 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Thu Sep 20 16:43:42 2007 Subject: [Haskell-fr] _ In-Reply-To: <18a05e6b0709201341i67605f80wad6ffa05e1f987a6@mail.gmail.com> References: <18a05e6b0709200755o70ef57c7n225d31ec63b885d7@mail.gmail.com> <200709201705.51899.nanardon@nanardon.zarb.org> <18a05e6b0709201341i67605f80wad6ffa05e1f987a6@mail.gmail.com> Message-ID: <18a05e6b0709201344m6ee3e8b5q478f3be8a072265a@mail.gmail.com> On 9/20/07, Dupont Corentin wrote: > On 9/20/07, Olivier Thauvin wrote: > > Le jeudi 20 septembre 2007, Dupont Corentin a ?crit : > > > Salut, > > > est-ce que vous auriez quelques exemples de l'utilisation des symboles _ et > > > []? C'est utilis? dans le cadre du pattern matching, mais j'ai du mal avec > > > le _... > > > > vrai :: Integer -> Bool > > vrai 0 = False > > vrai _ = True > > > > ce qui reviens ? ?crire en fonctionnel: > > > > Bool vrai (Integer variable) { > > if (variable == 0) { return False } > > else { return True } > > } > > > > On peut faire pareil sur des listes: > > > > vide :: [a] -> Bool > > vide [] = True > > vide (_) = False > > > > Sauf typo de ma part dans le code. > > > > Voici un exemple de code qui compile: > > > > myfilter :: [String] -> [String] > > myfilter [] = [] > > myfilter (x:xs) = > > case x of > > '#':_ -> myfilter(xs) > > otherwise -> x:myfilter(xs) > > Dans ton exemple je ne comprend pas, > le x est bien un seul carat?re? > comment peut-il matcher avec '#':_ qui est me semble t-il une chaine? Autre question, est ce que je peux taper ton exemple directement que ghci sans utiliser de ficher? > > > > > > > > Qui vire la fin des lignes d?s qu'un '#' est rencontr?. > > > > Cordialement. > > > > (J'ai bien compris que ?a, alors j'en profite !) > > > > _______________________________________________ > > Haskell-fr mailing list > > Haskell-fr@haskell.org > > http://www.haskell.org/mailman/listinfo/haskell-fr > > > > > > > From dav.vire+haskell at gmail.com Thu Sep 20 16:44:35 2007 From: dav.vire+haskell at gmail.com (david48) Date: Thu Sep 20 16:44:10 2007 Subject: [Haskell-fr] _ In-Reply-To: <18a05e6b0709201341i67605f80wad6ffa05e1f987a6@mail.gmail.com> References: <18a05e6b0709200755o70ef57c7n225d31ec63b885d7@mail.gmail.com> <200709201705.51899.nanardon@nanardon.zarb.org> <18a05e6b0709201341i67605f80wad6ffa05e1f987a6@mail.gmail.com> Message-ID: <4c88418c0709201344v76872775h1fc51882cf6d62aa@mail.gmail.com> On 9/20/07, Dupont Corentin wrote: > Dans ton exemple je ne comprend pas, > le x est bien un seul carat?re? > comment peut-il matcher avec '#':_ qui est me semble t-il une chaine? myfilter :: [String] -> [String] x est une chaine. David. From dav.vire+haskell at gmail.com Thu Sep 20 16:45:56 2007 From: dav.vire+haskell at gmail.com (david48) Date: Thu Sep 20 16:45:33 2007 Subject: [Haskell-fr] _ In-Reply-To: <18a05e6b0709201344m6ee3e8b5q478f3be8a072265a@mail.gmail.com> References: <18a05e6b0709200755o70ef57c7n225d31ec63b885d7@mail.gmail.com> <200709201705.51899.nanardon@nanardon.zarb.org> <18a05e6b0709201341i67605f80wad6ffa05e1f987a6@mail.gmail.com> <18a05e6b0709201344m6ee3e8b5q478f3be8a072265a@mail.gmail.com> Message-ID: <4c88418c0709201345g3d615d66g88b78f7dbd857d5@mail.gmail.com> On 9/20/07, Dupont Corentin wrote: > Autre question, est ce que je peux taper ton exemple directement que > ghci sans utiliser de ficher? pas tel quel. il faut utiliser "let" pour les d?finitions de fonctions dans ghci. From corentin.dupont at gmail.com Thu Sep 20 18:21:27 2007 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Thu Sep 20 18:21:03 2007 Subject: [Haskell-fr] _ In-Reply-To: <4c88418c0709201344v76872775h1fc51882cf6d62aa@mail.gmail.com> References: <18a05e6b0709200755o70ef57c7n225d31ec63b885d7@mail.gmail.com> <200709201705.51899.nanardon@nanardon.zarb.org> <18a05e6b0709201341i67605f80wad6ffa05e1f987a6@mail.gmail.com> <4c88418c0709201344v76872775h1fc51882cf6d62aa@mail.gmail.com> Message-ID: <18a05e6b0709201521y4b2d4db7ia13785394dfad649@mail.gmail.com> On 9/20/07, david48 wrote: > On 9/20/07, Dupont Corentin wrote: > > Dans ton exemple je ne comprend pas, > > le x est bien un seul carat?re? > > comment peut-il matcher avec '#':_ qui est me semble t-il une chaine? > > myfilter :: [String] -> [String] > > x est une chaine. OK j'avais lu myfilter :: String -> String... Pour ghci, m?me avec let je n'y arrive pas car la fonction est en plusieurs lignes. Et je ne sait pas d?finir le type non plus... > > David. > _______________________________________________ > Haskell-fr mailing list > Haskell-fr@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-fr > From nanardon at nanardon.zarb.org Thu Sep 20 20:21:41 2007 From: nanardon at nanardon.zarb.org (Olivier Thauvin) Date: Thu Sep 20 20:21:26 2007 Subject: [Haskell-fr] _ In-Reply-To: <18a05e6b0709201341i67605f80wad6ffa05e1f987a6@mail.gmail.com> References: <18a05e6b0709200755o70ef57c7n225d31ec63b885d7@mail.gmail.com> <200709201705.51899.nanardon@nanardon.zarb.org> <18a05e6b0709201341i67605f80wad6ffa05e1f987a6@mail.gmail.com> Message-ID: <200709210221.50199.nanardon@nanardon.zarb.org> Le jeudi 20 septembre 2007, Dupont Corentin a ?crit?: > > myfilter :: [String] -> [String] > > myfilter [] = [] > > myfilter (x:xs) = > > case x of > > '#':_ -> myfilter(xs) > > otherwise -> x:myfilter(xs) > > Dans ton exemple je ne comprend pas, > le x est bien un seul carat?re? Non, si tu regarde bien le prototype de la fonction, tu verras [String], et String est alias de [Char]. Donc dans (x:xs), x est le premier ?l?ment d'un tableau de chaine, donc un tableau de caract?res. > comment peut-il matcher avec '#':_ qui est me semble t-il une chaine? Si x est un tableau de Char ([Char]), il peut matcher '#':_ donc. Cordialement. PS: qq1 d'autre a d?j? r?pondu, mais je m'en aper?ois apr?s avoir tap?, alors j'envois quand m?me ;) -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: This is a digitally signed message part. Url : http://www.haskell.org/pipermail/haskell-fr/attachments/20070921/5382871a/attachment-0001.bin From stephane+haskell-fr at bortzmeyer.org Fri Sep 21 03:52:41 2007 From: stephane+haskell-fr at bortzmeyer.org (Stephane Bortzmeyer) Date: Fri Sep 21 03:52:16 2007 Subject: [Haskell-fr] Re: =?iso-8859-1?q?inf=E9rence?= In-Reply-To: <18a05e6b0709200555q247130d2ofaff3d913ba995d1@mail.gmail.com> References: <18a05e6b0709130844u32611333q394b2b1f50d3e33b@mail.gmail.com> <218036.91015.qm@web36504.mail.mud.yahoo.com> <18a05e6b0709200555q247130d2ofaff3d913ba995d1@mail.gmail.com> Message-ID: <20070921075241.GA8560@nic.fr> On Thu, Sep 20, 2007 at 02:55:28PM +0200, Dupont Corentin wrote a message of 158 lines which said: > Pour ma soci?t?, j'ai ?crit une petite introduction ? Haskell. Tiens, moi aussi :-) http://www.bortzmeyer.org/haskell-expose-fr.html From cdupont at sii.fr Fri Sep 21 04:04:41 2007 From: cdupont at sii.fr (Dupont Corentin) Date: Fri Sep 21 04:04:16 2007 Subject: [Haskell-fr] =?iso-8859-1?q?Re=3A_inf=E9rence?= In-Reply-To: <20070921075241.GA8560@nic.fr> References: <18a05e6b0709130844u32611333q394b2b1f50d3e33b@mail.gmail.com> <218036.91015.qm@web36504.mail.mud.yahoo.com> <18a05e6b0709200555q247130d2ofaff3d913ba995d1@mail.gmail.com> <20070921075241.GA8560@nic.fr> Message-ID: <18a05e6b0709210104x2218cb22j389e2e5e36c02ddd@mail.gmail.com> Ah oui, tr?s bon, j'avais d?j? vu ta pr?sentation ;) Le soucis, c'est que je suis dans une boite de services, donc nous sommes plut?t "suiveurs" en mati?re de technologies! Alors Haskell, faut pas y compter tout de suite... On 9/21/07, Stephane Bortzmeyer wrote: > On Thu, Sep 20, 2007 at 02:55:28PM +0200, > Dupont Corentin wrote > a message of 158 lines which said: > > > Pour ma soci?t?, j'ai ?crit une petite introduction ? Haskell. > > Tiens, moi aussi :-) > > http://www.bortzmeyer.org/haskell-expose-fr.html > From stephane+haskell-fr at bortzmeyer.org Fri Sep 21 04:15:43 2007 From: stephane+haskell-fr at bortzmeyer.org (Stephane Bortzmeyer) Date: Fri Sep 21 04:15:17 2007 Subject: [Haskell-fr] Re: =?iso-8859-1?q?inf=E9rence?= In-Reply-To: <46F2D8B2.5090605@imageworks.com> References: <18a05e6b0709130844u32611333q394b2b1f50d3e33b@mail.gmail.com> <218036.91015.qm@web36504.mail.mud.yahoo.com> <18a05e6b0709200555q247130d2ofaff3d913ba995d1@mail.gmail.com> <46F2D8B2.5090605@imageworks.com> Message-ID: <20070921081543.GB8560@nic.fr> On Thu, Sep 20, 2007 at 01:31:46PM -0700, Dan Weston wrote a message of 195 lines which said: > En revanche, gr?ce ? la transparence r?f?rentielle, le r?sultat d'une > expression une fois ?valu?e peut ?tre m?moiz? > (http://fr.wikipedia.org/wiki/M%C3%A9moization) et r?utilis? ailleurs, > ?vitant le co?t de calculs redondants. Oui, mais c'est surtout th?orique. Le compilo ne le fait pas tout seul et, en pratique, c'est du travail de la part du programmeur que de m?moiser. From corentin.dupont at gmail.com Fri Sep 21 04:20:41 2007 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Fri Sep 21 04:20:15 2007 Subject: =?ISO-8859-1?Q?Re:_[Haskell-fr]_Re:_inf=E9rence?= In-Reply-To: <20070921081543.GB8560@nic.fr> References: <18a05e6b0709130844u32611333q394b2b1f50d3e33b@mail.gmail.com> <218036.91015.qm@web36504.mail.mud.yahoo.com> <18a05e6b0709200555q247130d2ofaff3d913ba995d1@mail.gmail.com> <46F2D8B2.5090605@imageworks.com> <20070921081543.GB8560@nic.fr> Message-ID: <18a05e6b0709210120y6afd714fn726e562914c6060@mail.gmail.com> On 9/21/07, Stephane Bortzmeyer wrote: > On Thu, Sep 20, 2007 at 01:31:46PM -0700, > Dan Weston wrote > a message of 195 lines which said: > > > En revanche, gr?ce ? la transparence r?f?rentielle, le r?sultat d'une > > expression une fois ?valu?e peut ?tre m?moiz? > > (http://fr.wikipedia.org/wiki/M%C3%A9moization) et r?utilis? ailleurs, > > ?vitant le co?t de calculs redondants. > > Oui, mais c'est surtout th?orique. Le compilo ne le fait pas tout seul > et, en pratique, c'est du travail de la part du programmeur que de > m?moiser. Ah bon?? Comment ?a? Et moi qui ai une mauvaise m?moire :( > > _______________________________________________ > Haskell-fr mailing list > Haskell-fr@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-fr > From chaddai.fouche at gmail.com Fri Sep 21 06:35:30 2007 From: chaddai.fouche at gmail.com (=?ISO-8859-1?Q?Chadda=EF_Fouch=E9?=) Date: Fri Sep 21 06:35:08 2007 Subject: [Haskell-fr] _ In-Reply-To: <18a05e6b0709201521y4b2d4db7ia13785394dfad649@mail.gmail.com> References: <18a05e6b0709200755o70ef57c7n225d31ec63b885d7@mail.gmail.com> <200709201705.51899.nanardon@nanardon.zarb.org> <18a05e6b0709201341i67605f80wad6ffa05e1f987a6@mail.gmail.com> <4c88418c0709201344v76872775h1fc51882cf6d62aa@mail.gmail.com> <18a05e6b0709201521y4b2d4db7ia13785394dfad649@mail.gmail.com> Message-ID: Le 21/09/07, Dupont Corentin a ?crit : > > Pour ghci, m?me avec let je n'y arrive pas car la fonction est en > plusieurs lignes. > Et je ne sait pas d?finir le type non plus... Le type sera inf?r?, il est vrai que tu ne peux ?crire que sur une ligne (je te conseille de prendre un ?diteur avec un bon support d'Haskell, pour pouvoir charger directement tes modules dans une instance de GHCi, emacs ou vim pour citer des classiques), tu dois donc te passer du layout : let myfilter xxs = case xxs of {[] -> [] ; ('#':_):xs -> myfilter xs ; x:xs -> x:myfilter xs} (tu pourrais aussi copier plus directement la structure de l'original et faire deux case imbriqu?s, mais l'int?r?t est limit?...) ou tu peux ?crire : let myfilter = filter ((/='#').head) bien s?r... ;-) (mais il n'y a plus de _) -- Jeda? From westondan at imageworks.com Fri Sep 21 14:46:26 2007 From: westondan at imageworks.com (Dan Weston) Date: Fri Sep 21 14:49:35 2007 Subject: [Haskell-fr] Re: =?ISO-8859-1?Q?inf=E9rence?= In-Reply-To: <20070921081543.GB8560@nic.fr> References: <18a05e6b0709130844u32611333q394b2b1f50d3e33b@mail.gmail.com> <218036.91015.qm@web36504.mail.mud.yahoo.com> <18a05e6b0709200555q247130d2ofaff3d913ba995d1@mail.gmail.com> <46F2D8B2.5090605@imageworks.com> <20070921081543.GB8560@nic.fr> Message-ID: <46F41182.6090305@imageworks.com> Si je ne me trompe pas, dans les cas suivants: f x = ... let f x = ... where f x = ... l'?valuation de (f x) est automatiquement m?mois?e par GHC pour chaque instance de x. Par contre, let f = (+1) in f x ne m?moize pas (f x). Pour ?tre certain de ce que fait le compilo GHC, tu peux poser la question ? Glasgow-haskell-users. Moi, je n'y suis pas souscrit. Dan Stephane Bortzmeyer wrote: > On Thu, Sep 20, 2007 at 01:31:46PM -0700, > Dan Weston wrote > a message of 195 lines which said: > >> En revanche, gr?ce ? la transparence r?f?rentielle, le r?sultat d'une >> expression une fois ?valu?e peut ?tre m?moiz? >> (http://fr.wikipedia.org/wiki/M%C3%A9moization) et r?utilis? ailleurs, >> ?vitant le co?t de calculs redondants. > > Oui, mais c'est surtout th?orique. Le compilo ne le fait pas tout seul > et, en pratique, c'est du travail de la part du programmeur que de > m?moiser. > > _______________________________________________ > Haskell-fr mailing list > Haskell-fr@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-fr > > From corentin.dupont at gmail.com Sat Sep 22 13:58:03 2007 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Sat Sep 22 13:57:32 2007 Subject: [Haskell-fr] lagrange Message-ID: <18a05e6b0709221058s132e5ec1wd04651cdf7994f2d@mail.gmail.com> Skipped content of type multipart/alternative-------------- next part -------------- A non-text attachment was scrubbed... Name: poly_lagrange.png Type: image/png Size: 2965 bytes Desc: not available Url : http://www.haskell.org/pipermail/haskell-fr/attachments/20070922/32251935/poly_lagrange.png From dav.vire+haskell at gmail.com Mon Sep 24 06:05:12 2007 From: dav.vire+haskell at gmail.com (david48) Date: Mon Sep 24 06:04:36 2007 Subject: [Haskell-fr] lagrange In-Reply-To: <18a05e6b0709221058s132e5ec1wd04651cdf7994f2d@mail.gmail.com> References: <18a05e6b0709221058s132e5ec1wd04651cdf7994f2d@mail.gmail.com> Message-ID: <4c88418c0709240305r55d18dd5vfb33d71ad98cad2d@mail.gmail.com> On 9/22/07, Dupont Corentin wrote: > Voici l'?quation en annexe... Ma bosse des maths vient de r?tr?cir d'un coup ! From westondan at imageworks.com Mon Sep 24 14:57:01 2007 From: westondan at imageworks.com (Dan Weston) Date: Mon Sep 24 14:57:45 2007 Subject: [Haskell-fr] lagrange In-Reply-To: <18a05e6b0709221058s132e5ec1wd04651cdf7994f2d@mail.gmail.com> References: <18a05e6b0709221058s132e5ec1wd04651cdf7994f2d@mail.gmail.com> Message-ID: <46F8087D.3050001@imageworks.com> On pourrait toujours proc?der ? partir de: p ys xs x = zipWith (*) ys . map (flip ($)) x $ ls where ls = ... x .. xs .. mais avant de coder un algorithme inf?rieur, je cite: Conte and de Boor, "Elementary Numerical Analysis, An Algorithmic Approach", p. 40: "In such a process, use of the Lagrange form seems wasteful since, in calculating p_x(x), no obvious advantage can be taken of the fact that one already has p_k-1(x) available. For this purpose and others, the Newton form of the interpolating polynomial is much better suited." La forme Newton (qui utilise les diff?rences divis?es) est beaucoup pr?f?rable ? celle de Lagrange pour ?valuer les polyn?mes de Lagrange (tu peux la googler plus facilement que je puisse la d?crire ici). Dan Weston Dupont Corentin wrote: > Salut, > r?cemment j'ai impl?ment? avec difficult? les polyn?mes de Lagrange en > Haskell. > Je pense que je passe ? cot? d'une ?criture beaucoup plus ?l?gante... > Comment l'?cririez-vous, avec la fameuse notation point-free?? > > Voici l'?quation en annexe... > > a+ > Corentin > > > ------------------------------------------------------------------------ > > > ------------------------------------------------------------------------ > > _______________________________________________ > Haskell-fr mailing list > Haskell-fr@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-fr From corentin.dupont at gmail.com Tue Sep 25 04:01:32 2007 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Tue Sep 25 04:00:54 2007 Subject: [Haskell-fr] lagrange In-Reply-To: <46F8087D.3050001@imageworks.com> References: <18a05e6b0709221058s132e5ec1wd04651cdf7994f2d@mail.gmail.com> <46F8087D.3050001@imageworks.com> Message-ID: <18a05e6b0709250101y24537c02u7ac16f4c1fce63e6@mail.gmail.com> A quoi sert le $ dans ta formule? On 9/24/07, Dan Weston wrote: > > On pourrait toujours proc?der ? partir de: > > p ys xs x = zipWith (*) ys . map (flip ($)) x $ ls > where ls = ... x .. xs .. > > mais avant de coder un algorithme inf?rieur, je cite: > > Conte and de Boor, "Elementary Numerical Analysis, An Algorithmic > Approach", p. 40: > > "In such a process, use of the Lagrange form seems wasteful since, in > calculating p_x(x), no obvious advantage can be taken of the fact that > one already has p_k-1(x) available. For this purpose and others, the > Newton form of the interpolating polynomial is much better suited." > > La forme Newton (qui utilise les diff?rences divis?es) est beaucoup > pr?f?rable ? celle de Lagrange pour ?valuer les polyn?mes de Lagrange > (tu peux la googler plus facilement que je puisse la d?crire ici). > > Dan Weston > > Dupont Corentin wrote: > > Salut, > > r?cemment j'ai impl?ment? avec difficult? les polyn?mes de Lagrange en > > Haskell. > > Je pense que je passe ? cot? d'une ?criture beaucoup plus ?l?gante... > > Comment l'?cririez-vous, avec la fameuse notation point-free?? > > > > Voici l'?quation en annexe... > > > > a+ > > Corentin > > > > > > ------------------------------------------------------------------------ > > > > > > ------------------------------------------------------------------------ > > > > _______________________________________________ > > Haskell-fr mailing list > > Haskell-fr@haskell.org > > http://www.haskell.org/mailman/listinfo/haskell-fr > > > _______________________________________________ > Haskell-fr mailing list > Haskell-fr@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-fr > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/haskell-fr/attachments/20070925/3b650feb/attachment.htm From westondan at imageworks.com Tue Sep 25 15:14:28 2007 From: westondan at imageworks.com (Dan Weston) Date: Tue Sep 25 15:14:07 2007 Subject: [Haskell-fr] lagrange In-Reply-To: <18a05e6b0709250101y24537c02u7ac16f4c1fce63e6@mail.gmail.com> References: <18a05e6b0709221058s132e5ec1wd04651cdf7994f2d@mail.gmail.com> <46F8087D.3050001@imageworks.com> <18a05e6b0709250101y24537c02u7ac16f4c1fce63e6@mail.gmail.com> Message-ID: <46F95E14.1030303@imageworks.com> L'op?rateur ($) n'est que l'application (d'une fonction) ? basse pr?c?dence, dont la d?finition est assez simple: infixr 0 $ f $ x = f x C'est la premi?re ligne qui co?te. La pr?c?dence de l'application est 10 (la plus haute), tandis que la pr?c?dence de ($) est 0 (la plus basse). E.g., f . g . h . k $ x = f (g (h (k x))) ($) sert ? obvier aux parenth?ses et ? un style point-free qui est (pour moi au moins) plus compr?hensible et ?l?gant, mais tous les deux sont traduits identiquement. Dan Dupont Corentin wrote: > > A quoi sert le $ dans ta formule? > > > On 9/24/07, *Dan Weston* > wrote: > > On pourrait toujours proc?der ? partir de: > > p ys xs x = zipWith (*) ys . map (flip ($)) x $ ls > where ls = ... x .. xs .. > > mais avant de coder un algorithme inf?rieur, je cite: > > Conte and de Boor, "Elementary Numerical Analysis, An Algorithmic > Approach", p. 40: > > "In such a process, use of the Lagrange form seems wasteful since, in > calculating p_x(x), no obvious advantage can be taken of the fact that > one already has p_k-1(x) available. For this purpose and others, the > Newton form of the interpolating polynomial is much better suited." > > La forme Newton (qui utilise les diff?rences divis?es) est beaucoup > pr?f?rable ? celle de Lagrange pour ?valuer les polyn?mes de Lagrange > (tu peux la googler plus facilement que je puisse la d?crire ici). > > Dan Weston > > Dupont Corentin wrote: > > Salut, > > r?cemment j'ai impl?ment? avec difficult? les polyn?mes de > Lagrange en > > Haskell. > > Je pense que je passe ? cot? d'une ?criture beaucoup plus > ?l?gante... > > Comment l'?cririez-vous, avec la fameuse notation point-free?? > > > > Voici l'?quation en annexe... > > > > a+ > > Corentin > > > > > > > ------------------------------------------------------------------------ > > > > > > > > ------------------------------------------------------------------------ > > > > _______________________________________________ > > Haskell-fr mailing list > > Haskell-fr@haskell.org > > http://www.haskell.org/mailman/listinfo/haskell-fr > > > _______________________________________________ > Haskell-fr mailing list > Haskell-fr@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-fr > > > > ------------------------------------------------------------------------ > > _______________________________________________ > Haskell-fr mailing list > Haskell-fr@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-fr From nanardon at nanardon.zarb.org Tue Sep 25 20:18:57 2007 From: nanardon at nanardon.zarb.org (Olivier Thauvin) Date: Tue Sep 25 20:18:18 2007 Subject: [Haskell-fr] lagrange In-Reply-To: <46F95E14.1030303@imageworks.com> References: <18a05e6b0709221058s132e5ec1wd04651cdf7994f2d@mail.gmail.com> <18a05e6b0709250101y24537c02u7ac16f4c1fce63e6@mail.gmail.com> <46F95E14.1030303@imageworks.com> Message-ID: <200709260218.58612.nanardon@nanardon.zarb.org> Le mardi 25 septembre 2007, Dan Weston a ?crit?: > L'op?rateur ($) n'est que l'application (d'une fonction) ? basse > pr?c?dence, dont la d?finition est assez simple: > > infixr 0 $ > f $ x = f x > > C'est la premi?re ligne qui co?te. La pr?c?dence de l'application est 10 > (la plus haute), tandis que la pr?c?dence de ($) est 0 (la plus basse). > > E.g., f . g . h . k $ x = f (g (h (k x))) > > ($) sert ? obvier aux parenth?ses et ? un style point-free qui est (pour > moi au moins) plus compr?hensible et ?l?gant, mais tous les deux sont > traduits identiquement. Si je peux me permettre, je vais donner un exemple extr?mement simple: addition a b = a + b addition a addition c d Sur cette deuxi?me ligne, haskell va r?ler du style "addition prends 2 arguments, pas 4". Le '$' permet d'?crire: addition a $ addition b c on a alors "a" et "addition b c", ce qui ne fait plus que deux argument au premier "addition". Le '.' j'ai encore du mal ;) -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: This is a digitally signed message part. Url : http://www.haskell.org/pipermail/haskell-fr/attachments/20070926/f21e4266/attachment.bin From westondan at imageworks.com Tue Sep 25 20:54:51 2007 From: westondan at imageworks.com (Dan Weston) Date: Tue Sep 25 20:54:14 2007 Subject: [Haskell-fr] lagrange In-Reply-To: <200709260218.58612.nanardon@nanardon.zarb.org> References: <18a05e6b0709221058s132e5ec1wd04651cdf7994f2d@mail.gmail.com> <18a05e6b0709250101y24537c02u7ac16f4c1fce63e6@mail.gmail.com> <46F95E14.1030303@imageworks.com> <200709260218.58612.nanardon@nanardon.zarb.org> Message-ID: <46F9ADDB.5070104@imageworks.com> > addition a $ addition b c Aussi on voit parfois addition a $ addition b $ c Ce dernier d?pend de ce que le ($) s'associe vers la droite, fix? dans le Pr?lude par le r ? la fin de infixr, pars? comme: addition a $ (addition b $ c) Le plus souvent, je vois addition a . addition b $ c Ce d?pend de ce que le ($) a une pr?c?dence inf?rieure ? celle de (.), fix?e ? 9 dans le Pr?lude par "infixr 9 .", pars? comme: (addition a . addition) b $ c Enfin, il faut trouver un style qui te conviennes et y tenir. Moi, je pr?f?re ce dernier. Dan Olivier Thauvin wrote: > Le mardi 25 septembre 2007, Dan Weston a ?crit : >> L'op?rateur ($) n'est que l'application (d'une fonction) ? basse >> pr?c?dence, dont la d?finition est assez simple: >> >> infixr 0 $ >> f $ x = f x >> >> C'est la premi?re ligne qui co?te. La pr?c?dence de l'application est 10 >> (la plus haute), tandis que la pr?c?dence de ($) est 0 (la plus basse). >> >> E.g., f . g . h . k $ x = f (g (h (k x))) >> >> ($) sert ? obvier aux parenth?ses et ? un style point-free qui est (pour >> moi au moins) plus compr?hensible et ?l?gant, mais tous les deux sont >> traduits identiquement. > > Si je peux me permettre, je vais donner un exemple extr?mement simple: > > addition a b = a + b > > addition a addition c d > > Sur cette deuxi?me ligne, haskell va r?ler du style "addition prends 2 > arguments, pas 4". Le '$' permet d'?crire: > > addition a $ addition b c > > on a alors "a" et "addition b c", ce qui ne fait plus que deux argument au > premier "addition". > > Le '.' j'ai encore du mal ;) > > > ------------------------------------------------------------------------ > > _______________________________________________ > Haskell-fr mailing list > Haskell-fr@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-fr From westondan at imageworks.com Tue Sep 25 20:56:51 2007 From: westondan at imageworks.com (Dan Weston) Date: Tue Sep 25 21:00:07 2007 Subject: [Haskell-fr] lagrange In-Reply-To: <46F9ADDB.5070104@imageworks.com> References: <18a05e6b0709221058s132e5ec1wd04651cdf7994f2d@mail.gmail.com> <18a05e6b0709250101y24537c02u7ac16f4c1fce63e6@mail.gmail.com> <46F95E14.1030303@imageworks.com> <200709260218.58612.nanardon@nanardon.zarb.org> <46F9ADDB.5070104@imageworks.com> Message-ID: <46F9AE53.8020605@imageworks.com> > Ce d?pend de ce que le ($) a une pr?c?dence inf?rieure ? celle de (.), > fix?e ? 9 dans le Pr?lude par "infixr 9 .", pars? comme: > > (addition a . addition) b $ c Evidemment je voulais ?crire: > (addition a . addition b) $ c Dan Weston wrote: > > > addition a $ addition b c > > Aussi on voit parfois > > addition a $ addition b $ c > > Ce dernier d?pend de ce que le ($) s'associe vers la droite, fix? dans > le Pr?lude par le r ? la fin de infixr, pars? comme: > > addition a $ (addition b $ c) > > Le plus souvent, je vois > > addition a . addition b $ c > > Ce d?pend de ce que le ($) a une pr?c?dence inf?rieure ? celle de (.), > fix?e ? 9 dans le Pr?lude par "infixr 9 .", pars? comme: > > (addition a . addition) b $ c > > Enfin, il faut trouver un style qui te conviennes et y tenir. Moi, je > pr?f?re ce dernier. > > Dan > > Olivier Thauvin wrote: >> Le mardi 25 septembre 2007, Dan Weston a ?crit : >>> L'op?rateur ($) n'est que l'application (d'une fonction) ? basse >>> pr?c?dence, dont la d?finition est assez simple: >>> >>> infixr 0 $ >>> f $ x = f x >>> >>> C'est la premi?re ligne qui co?te. La pr?c?dence de l'application est 10 >>> (la plus haute), tandis que la pr?c?dence de ($) est 0 (la plus basse). >>> >>> E.g., f . g . h . k $ x = f (g (h (k x))) >>> >>> ($) sert ? obvier aux parenth?ses et ? un style point-free qui est (pour >>> moi au moins) plus compr?hensible et ?l?gant, mais tous les deux sont >>> traduits identiquement. >> >> Si je peux me permettre, je vais donner un exemple extr?mement simple: >> >> addition a b = a + b >> >> addition a addition c d >> >> Sur cette deuxi?me ligne, haskell va r?ler du style "addition prends 2 >> arguments, pas 4". Le '$' permet d'?crire: >> >> addition a $ addition b c >> >> on a alors "a" et "addition b c", ce qui ne fait plus que deux >> argument au premier "addition". >> >> Le '.' j'ai encore du mal ;) >> >> >> ------------------------------------------------------------------------ >> >> _______________________________________________ >> Haskell-fr mailing list >> Haskell-fr@haskell.org >> http://www.haskell.org/mailman/listinfo/haskell-fr > >