Caml-Light, sur Amiga aussi

3 sujets de 1 à 3 (sur un total de 3)

  • BrickCaster

      #764

      Bon d’accord c’est quand même un peu pour les matheux, mais c’est beaucoup trop puissant pour passer à côté.

      Caml-Light pour Amiga68k, en français:

      http://pauillac.inria.fr/cdrom/prog/others/caml/fra.htm

      De la documentation pour démarrer, en anglais:

      http://caml.inria.fr/man-caml/index.html

      ftp://ftp.inria.fr/INRIA/caml-light/cl74refman.txt

      ftp://ftp.inria.fr/INRIA/caml-light/cl74tutorial.txt

      Encore de la documentation, en français:

      http://caml.inria.fr/books-fra.html

      http://caml.inria.fr/polycopies/cheno/index-fra.html

      http://caml.inria.fr/polycopies/quercia/index-fra.html

      http://caml.inria.fr/polycopies/lemaire/index-fra.html

      Pour ceux qui douteraient encore voici un programme qui dérive une fonction quelconque:

      type Fun = X

      | R of float

      | Sin of Fun

      | Cos of Fun

      | Tan of Fun

      | Log of Fun

      | Exp of Fun

      | Power of Fun * float

      | Add of Fun * Fun

      | Mul of Fun * Fun

      ;;

      let rec Deriv f = (

      match f with

      | X -> R(1.)

      | R(k) -> R(0.)

      | Add(u,R(k)) -> Deriv(u)

      | Add(u,v) -> Add(Deriv(u),Deriv(v))

      | Mul(R(k),X) -> R(k)

      | Mul(R(k),u) -> Mul2(R(k),Deriv(u))

      | Mul(u,v) -> Add(Mul2(Deriv(u),v),Mul2(u,Deriv(v)))

      | Sin(u) -> Mul2(Deriv(u),Cos(u))

      | Cos(u) -> Mul2(R(-1.),Mul2(Deriv(u),Sin(u)))

      | Tan(u) -> Mul2(Deriv(u),Power(Cos(u),-2.))

      | Log(u) -> Mul2(Deriv(u),Power(u,-1.))

      | Exp(u) -> Mul2(Deriv(u),Exp(u))

      | Power(u,2.) -> Mul2(R(2.),Mul2(Deriv(u),u))

      | Power(u,b) -> Mul2(R(b),Mul2(Deriv(u),Power(u,b-.1.)))

      )

      where rec Mul1 p = match p with

      | R(1.),u -> u

      | u,v -> Mul(u,v)

      and Mul2 p = match p with

      | R(a),Mul(R(b),u) -> Mul1(R(a*.b),u)

      | Mul(R(a),u),R(b) -> Mul1(R(a*.b),u)

      | Mul(R(a),u),Mul(R(b),v) -> Mul1(R(a*.b),Mul(u,v))

      | u,Mul(R(k),v) -> Mul(R(k),Mul(u,v))

      | Mul(R(k),u),v -> Mul(R(k),Mul(u,v))

      | u,v -> Mul1(u,v)

      ;;

      Maintenant pour dériver 3cos^2 (x^2-1) il suffit de taper à l’invite:

      Deriv(Mul(R(3.),Power(Cos(Add(Power(X,2.),R(-1.))),2.)));;

      Et on obtient une expression dont chacun pourra vérifier qu’elle est bien -12x.sin(x^2-1).cos(x^2-1)

      Pour ce qui est de mettre ces expressions sous une forme plus lisible, et bien je vous le laisse à titre d’exercice (conseil: utilisez le filtrage sur les flux de caractères).

      krabob

        #21601

        titanesque !!! … et utile !!! me fallait ça pour une intro64k.

        jit

          #21602

          arg, ça me refait penser au temps au j’étais chez Cryonetworks… on faisait du SCOL. Assez proche du caml… en moins piussant :)

        3 sujets de 1 à 3 (sur un total de 3)

        • Vous devez être connecté pour répondre à ce sujet.

        Forums AmigaOS, MorphOS et AROS Développement Caml-Light, sur Amiga aussi

        Amiga Impact