IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

Fonction eval ou apply


Sujet :

Caml

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut Fonction eval ou apply
    Ok... vous allez peut-être me trouver niaiseux : depuis le temps que je fais du ocaml (en amateur certes, mais ça fait un bout de temps quand même) je n'avais jamais remarqué que ça n'existait pas.

    Question numéro 1 : Existe-t-il des substituts ?

    Juste au cas où :
    • Apply : prend une fonction et une liste d'arguments et applique la fonction à la liste de ces arguments. Intuitivement on dirait que c'est ça
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      let rec apply f = function
          | [] -> f
          | h::t -> apply (f h) t
      mais sans même le tester, je sais que ça ne typecheckera pas puisque ça fait parti de ces fonctions qui ne peuvent pas typechecker . Je suppose que le préprocesseur permet (peut-être) de faire ça.
    • Eval : prend une liste de symbole et l'évalue comme une expression... certes les symboles n'existent même pas dans ocaml... mais on pourrait se débrouiller avec un constructeur de symbole. Toujours est-il que je suppose qu'on pourrait se débrouiller avec le préprocesseur pour ça aussi non ?


    Donc... ma question numéro 2 : où trouver un bon manuel du préprocesseur ? Parce que sans vouloir paraître médisant, certaines parties du manuel officiel sont à chier ou très mal faites (à mon goût certes).

    N.B. je pense que c'est là que se trouve la force de PLT Scheme : les macros sont tellement simples à mettre en œuvre que s'en est hallucinant.

  2. #2
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Normalement, tu devrais pouvoir te passer de ça dans la plupart des cas. Tu peux expliquer dans quel cas tu en aurais besoin ?


    Un problème, c'est que le préprocesseur a été complètement réécrit pour la version 3.10, et je ne sais pas si les anciens tutoriels sont toujours utiles. Ces deux pages présentent un certain nombre de liens :
    http://www.ocaml-tutorial.org/camlp4_3.10
    http://en.wikipedia.org/wiki/Camlp4


    Bien sûr, F# permet d'avoir apply (via introspection) et eval (via les quotations).

  3. #3
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    menhir : http://pauillac.inria.fr/~fpottier/menhir/manual.pdf

    sinon je me demande si l'on ne pourrait pas jouer avec un module afin d'obtenir une fonction apply au moyen de types fantomes

    un peu comme ici : http://till-varoquaux.blogspot.com/2...tom-types.html
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Par défaut
    gorgonite : il me semble qu'en toute généralité ce n'est clairement par possible puisque le langage des types, par construction, n'est pas Turing complet, et donc ne pourra jamais évaluer autant d'expressions que OCaml.

    Si vous voulez jouer avec plusieurs niveaux d'évaluation, il faut essayer l'extension multi-stage d'OCaml, MetaOCaml . Ça a l'air très intéressant et rigolo, mais je n'ai jamais essayé.

    Garulfo : si tu veux utiliser apply, c'est à priori un problème de conception. Par ailleurs, en vérité il n'existe pas de bonne documentation de Camlp4 >= 3.10. L'endroit le plus complet est sans doute la wiki Gallium, et sinon il faut lire du code, que ce soit du code d'extensions (le mieux pour voir comment faire, si ça t'intéresse les miennes sont principalement ici) ou de Camlp4 lui-même (en particulier le fichier Calmp4Parsers/Camlp4OCamlRevisedParser.ml est intéressant).
    Tu peux aussi générer toi-même de la documentation sur les signatures des modules Camlp4, mais c'est inutile puisque je l'ai mise sur le net.

    Par contre, je te conseille de te familiariser avec le langage avant de te mettre à tripoter la syntaxe. Ce n'est pas pour médire, mais j'ai l'impression qu'actuellement tu es beaucoup trop "déformé" par le lisp/scheme : essayer de se rapprocher de ce qu'on connaît par des manipulations syntaxiques compliquées au lieu d'apprendre la manière "ocamlienne" de faire, ce n'est sans doute pas la bonne solution.

  5. #5
    Membre Expert
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Par défaut
    +1
    Il ne faut surtout pas chercher de mauvais substituts qui pourraient faire illusion un moment.

    Visiblement tu as de bonnes raisons de penser que apply-eval-call/cc te sont indispensables.
    Si tu pouvais l'expliquer en 4 ou 5 lignes maximum qui s'adressent à un public 'débutant', ce serait bien pour la FAQ

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Par défaut
    Par ailleurs, il existe des implémentations de call/cc (ou de call/cc delimités ou quoi, j'y connais rien à ces machins là) en OCaml, et sinon on peut faire des continuations à la main et/ou avec une monade.

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par LLB Voir le message
    [...]
    Bien sûr, F# permet d'avoir apply (via introspection) et eval (via les quotations).
    Comment t'essayes de m'acheter :O !!
    Ça va finir par marcher -_-

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Si certains s'intéressent aux méthodes formelles et aux algèbres de processus, je pourrais leur montrer un peu plus ce que je fais. Mais l'interpréteur que je prépare change pour l'instant beaucoup puisqu'il en est dans ces prémisses.

  9. #9
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    Citation Envoyé par gorgonite Voir le message
    sinon je me demande si l'on ne pourrait pas jouer avec un module afin d'obtenir une fonction apply au moyen de types fantomes
    un peu comme ici : http://till-varoquaux.blogspot.com/2...tom-types.html

    echec cuisant

    en revanche, on peut faire ainsi... ça compile, mais je n'ose pas exécuter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    let rec apply (f:'a->'b) (g:'a list) = 
      match g with
        |[] -> f
        |h::t ->
          let tmp : 'a->'b = Obj.magic (f h) in
          apply tmp t
    ;;
     
    let add x y =  x + y ;;
     
    let tmp : int = Obj.magic (apply add [1;2]) ;;
     
    let _ = Printf.printf "%d\n" tmp ;;
     
    let apply_map f l = apply (^) (List.map f l) ;;
     
    let tmp : string = Obj.magic (apply_map string_of_int [4;2]) ;;
     
    print_string tmp

    ça ne plante pas à l'exécution... mais ça doit tenir du miracle

    Citation Envoyé par Garulfo Voir le message
    Si certains s'intéressent aux méthodes formelles et aux algèbres de processus, je pourrais leur montrer un peu plus ce que je fais. Mais l'interpréteur que je prépare change pour l'instant beaucoup puisqu'il en est dans ces prémisses.
    bien sûr que ça nous intéresse
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  10. #10
    alex_pi
    Invité(e)
    Par défaut
    Citation Envoyé par gorgonite Voir le message
    en revanche, on peut faire ainsi...
    AAAAAAAAAAAAAAAAHHHHHHH, espèce de gros cochon va !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction eval en java ?
    Par ramislebob dans le forum Langage
    Réponses: 2
    Dernier message: 12/01/2006, 01h22
  2. Parsage avec la fonction eval
    Par alain31tl dans le forum Langage
    Réponses: 12
    Dernier message: 23/11/2005, 16h27
  3. Simuler la fonction eval
    Par topwl dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 26/08/2005, 02h44
  4. Existe-t-il une fonction Eval() sous Delphi ?
    Par Hell dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2004, 18h45
  5. [String] équivalent de la fonction eval() en javascript
    Par jeyce dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 01/09/2004, 09h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo