Caml-Light, sur Amiga aussi

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

  • BrickCaster

    • Messages : 183
    #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

    • Messages : 1171
    #21601

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

    jit

    • Messages : 72
    #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