[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: logiciel de mail ?



On Monday 04 August 2003 13:57, Sven Luther wrote:
      | On Mon, Aug 04, 2003 at 11:47:04AM +0100, Yves Rutschle wrote:
      | > On Mon, Aug 04, 2003 at 11:21:30AM +0200, Sven Luther wrote:
      | > > Les langages fonctionnels (lisp, scheme, sml, caml, ocaml,
      | > > haskell, erlang, clean, ...) sont base sur la theorie du lambda
      | > > calcul, qui a ete develope par Alonzo Church vers la fin des
      | > > annees 30 afin de modeliser les fonctions mathematiques (vous
      | > > savez, les f : N -> N x|-> 3x+1). Plus tard, on s'est rendu
      | > > compte que cette theorie logique s'appliquait parfaitement a
      | > > l'informatique, et qu'il etait possible de programmer tout ce qui
      | > > etait programmable avec cette theorie somme toute assez simple :
      | > > on a des variables, l'abstraction fonctionnelle (equivalant a
      | > > dire f(x) = 3x+1) et l'application (f(5) qui represente 3x5+1
      | > > soit 16). On a bien sur rajouter d'autres theories par la suite,
      | > > comme le lambda calcul type, langage de module et foncteurs,
      | > > extension oriente objet, programmation par continuation, monades,
      | > > ...).
      | >
      | > Il n'y a rien dans cette description qui permette de dire
      | > que C n'est pas un langage fonctionnel... À part BASIC (et
      | > encore) tous les langages ont des fonctions qui permettent
      | > de faire f(x)=3x+1.
      |
      | Err, je decrivait le lambda calcul. Une expression du lambda calcul,
      | note E ici est obtenu grace a :
      |
      |   o des variables: x, y, z, ...
      |
      |   o l'abstraction fonctionnelle, traditionnellement note par un
      | lambda, mais j'utiliserait \ ici  : \x.E
      |
      |   o l'application, traditionellement note par un espace. f 5
      | correspond a l'application de la fonction f a l'argument 5, ou f(5)
      | si tu prefere.
      |
      | Avec uniquement cela, et la beta-reduction comme regle de calcul :
      |
      |    \x.A B => A[x<=B] (A ou tous les x ont ete remplace par B).
      |
      | Tu peut exprimer tout les programmes exprimable.
      |
      | Ou si tu prefere une notation en en ocaml :
      |
      | type lambda = Var of string | Lambda of string * lambda | App of
      | lambda * lambda
      |
      | exception Nomal_Form
      |
      | let rec remplace x A = function
      |
      |   | Var y -> if x = y then A else Var y
      |   | Lambda (y, l) -> if x = y then Lambda (y, l) else Lambda (y,
      |   | remplace x A l) App (a, b) -> App (remplace x A a, remplace x A
      |   | b)
      |
      | let beta = function
      |
      |   | App (Lambda (x, l), b) -> remplace x b l
      |   | _ -> raise Normal_Form
      |
      | Il faut ensuite avoir une strategie d'evaluation pour resoudre tous
      | les beta-redex dans le terme, et il y a bien sur de nombreuse autre
      | maniere de faire cela. Si cela t'interesse, je te renvoie notament a
      | :
      |
      | http://pauillac.inria.fr/caml/lettre_de_caml/lettre6.pdf
      |
      | La difference entre ceci et la machine de turing, est que dans la
      | machinede turing, si je ne me trompe pas, tu a une bande contenant
      | des instructions, et qui est lu, et la lecture de la bande fait
      | changer l'etat de la machine a etat, et ainsi de suite.
      |
      | La puissance d'expression des deux formalisme est exactement le meme,
      | c'est a dire qu'il est prouve que tu peut exprimer exactement la meme
      | classe de programmes dans les deux formalismes.
      |
      | > > > > Ceci dit, dans quel famille de langage classes-tu le C ?
      | > > >
      | > > > Procédural. Le C est pratiquement équivalent à Pascal.
      | > >
      | > > Ou qu'au C++, ou qu'a l'assembleur, au basic, ...
      | >
      | > Le BASIC que je connais n'avais pas de fonctions, et reste
      | > nettement en dessous de C ou Pascal... Mais apparement
      | > 'BASIC' ne veut pas dire grand chose :-)
      |
      | C'est bien la cle du malentendu. Tous ces langages sont des langages
      | proceduraux, et le fait que certain inclus des fonctions et d'autre
      | non ne change rien a ce fait. On parle auss ide langage applicatifs
      | lorsque l'on parle de langage focntionnels.
      |
      | > Dans quelle catégorie places-tu Forth?
      |
      | C'est un langage procedural je crois, je suis pas un expert de Forth
      | cependant.

Je ne suis pas un expert non plus, mais j'ai pu lire quelques articles 
concernant ce langage, *jamais code*, juste etudie :)

Forth repose uniquement sur le principe de pile, souvent decrit comme tres 
efficace mais certainement l'un des langages les plus illisible connu a ce 
jour.

Tout comme les calculatrices HP, Forth utilise la notation polonaise inversee, 
ce qui se resume a decrire une succession d'actions (mots-cles) a effectuer 
sur une pile.

J'ai vu quelques bouts de code Forth, ca parait terriblement compact, et 
j'avoue ne pas avoir tout compris ...
J'ai vu dans un magasine que le surnom de ce langage etait "write-only", pour 
sa difficulte a la relecture :)

Forth semble encore pas mal actif et surtout dans les domaines de l'embarque 
http://www.forth.com/

Pour conclure je dirai qu'il ne fait partie d'aucune categorie, ou peut etre 
celle des langages vraiment atypique ...

Amicalement 

Mathieu




      |
      | Une autre maniere de voire la difference entre les deux types de
      | langages, c'est que dans un langage fonctionnel on s'interesse a
      | decrire ce que les expressions et fonctions sont, alors qu'un langage
      | imperatif s'interesse a comment elle seront execute.
      |
      | Amicalement,
      |
      | Sven Luther



Reply to: