CodeS-SourceS Groupes CodeS-SourceS est hébergé par Frontier.fr



Dernières discussions...

[iOs] pas de touche Home sur le simulateur ?
Je n'ai pas de touche Home sur le simulateur iPad ou iPhone même combat ? Bizarre aussi si je change la résolution de celui-ci si je passe a 75% par exemple si je reviens a 100 % sur l'iPhone le bouton home revient ? marche pas sur l'iPad ça ? ...

[iOs] pas de touche Home sur le simulateur ?
Je n'ai pas de touche Home sur le simulateur iPad ou iPhone même combat ? ...

[cherche] "Repository maven"
Salut je tente de développer mon projet. Où puis-je trouver un repository maven? Et de la documnetation en français pour le gérer Et tout gratuit. ...

Variable locale dans une formule
Bonjour, J'aimerais pouvoir utiliser une variable locale dans une formule : par exemple : A B C D E 1 2 3 4 5 =SI(VARDEF(A1:E1)>2;VARGET()) De sorte que je ne suis pas obligé de reprendre A1:...

remonter
Bonjour Comment faire pour que demain mardi se retrouve en première ligne ? Qu'il passe automatiquement à la place de lundi ? Merci ...

Offres d'emploi et de stage...

  • Recherche Développeur Application
    Recherche Développeur Application
    POSTE Rattaché(e) au Directeur Technique et intégré(e) à une équipe professionnelle et créative, vous participerez aux développements des outils 3D de la société. Vous interviendrez notamment sur : · L’étude et la conception des nouv...
  • Recherche Ingénieur développeur Catia V5/V6 et coordinateur CFAO
    Recherche Ingénieur développeur Catia V5/V6 et coordinateur CFAO
    Ingénieur développeur Catia V5 et coordinateur CFAO et maquette numérique Le cabinet ALCANDRE est mandaté par un acteur majeur de l’industrie aéronautique. Nous recherchons pour son compte un Ingénieur développeur Catia V5 et coordinateur CFAO. ...
  • Recherche Développeur PHP5 Sénior H/F
    Darkmira, recrute sur Paris, un développeur (femme ou homme) PHP 5 pour des applications développées chez nos clients. Vous avez au moins 3 années d'expériences dans le langage PHP 5, profil senior. Vous êtes motivé pour vous investir dans le déve...

Le top des photos

Photo ??Photo ???????????????
Photo ????????Photo ????????

Logiciels à télécharger...

  • Easy-Planning (4.5.0.11)
    Easy-Planning (4.5.0.11)
    Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté aux petites et moyennes entreprises(PME). Easy-Planning permet la création de plannings prévisionnels, p...
  • CVEasy (3.1.0.51)
    CVEasy (3.1.0.51)
    PHMSD-CVEasy est un logiciel d'aide à la rédaction de CV d'une simplicité déconcertante. PHMSD-CVEasy vous assistera pour la rédaction de votre CV, le CV de vos amis ou de membres de votre famille, m...
  • LettresFaciles 2011 (8.6.0.31)
    LettresFaciles 2011 (8.6.0.31)
    LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types. Son interface simple d'utilisation mais suffisamment complète vous permettra de créer une multitude de lettres....



Trouver une discussion à propos de...



Compilation et désignationde fonctions

Ecrit par Yliur le vendredi 7 septembre 2012 dans le thème : Lisp

Bonjour
Voilà ce que j'ai fait (pour un essai de fonction qui prend en
paramètre une fonction et renvoie la version avec mémoïsation).
C'est un essai sur la suite de Fibonacci.
Voilà ce que j'ai fait :
    - J'ai défini une fonction (récursive).
    - J'ai défini une fonction memo, qui prend en paramètre une
     fonction et renvoie une fonction qui gère le mémo.
    - J'ai fait (setf (symbol-function 'fibonacci)
                     (memo #'fibonacci))
     pour réassocier la fonction avec mémo au symbole d'origine.
Note : si j'utilise (memo 'fibonacci), sans le # (function) devant, ça
ne fonctionne pas comme je veux. Si je comprends bien ce qui se passe,
c'est parce que la fonction memo va contenir le symbole 'fibonacci, qui
ne lui permet plus de désigner la "vraie" fonction si une nouvelle
fonction a été associée au symbole.
A part ça, j'ai fait un essai avec CLisp et tout se passe comme prévu :
les valeurs sont accumulées au fur et à mesure au lieu d'être
recalculées.
Par contre si je compile la fonction fibonacci avec
(compile 'fibonnaci) juste après l'avoir définie, avant de retoucher au
symbole, ça ne fonctionne pas.
C'est comme si lors de la compilation la référence vers la fonction
était établie une fois pour toute. Je pensais au contraire que la
fonction associée au symbole serait récupérée à chaque exécution de la
fonction.
Est-ce qu'effectivement la compilation fige les choses ou est-ce que
j'ai manqué un élément ?
Il n'est donc pas possible de redéfinir une fonction et que toutes les
fonctions qui la référence appellent la nouvelle version (à part sans
doute en utilisant (funcall (symbol-function 'f))) ?
Merci
Yliur



Ecrit par Pascal J. Bourguignon le samedi 8 septembre 2012

Yliur writes:
> Bonjour
>
> Voilà ce que j'ai fait (pour un essai de fonction qui prend en
> paramètre une fonction et renvoie la version avec mémoïsation).
>
> C'est un essai sur la suite de Fibonacci.
>
> Voilà ce que j'ai fait :

§>§     - J'ai défini une fonction (récursive).
§>§     - J'ai défini une fonction memo, qui prend en paramètre une
§>§        fonction et renvoie une fonction qui gère le mémo.
§>§     - J'ai fait (setf (symbol-function 'fibonacci)
§>§                        (memo #'fibonacci))
§>§        pour réassocier la fonction avec mémo au symbole d'origine.
>
> Note : si j'utilise (memo 'fibonacci), sans le # (function) devant, ça

> ne fonctionne pas comme je veux. Si je comprends bien ce qui se passe,
> c'est parce que la fonction memo va contenir le symbole 'fibonacci, qui
> ne lui permet plus de désigner la "vraie" fonction si une nouvelle
> fonction a été associée au symbole.

En effet. Si tu utilise le symbole au moment de l'appel de la fonction,
(par funcall ou apply), alors c'est (symbol-function symbole) qui sera
appelée, et comme c'est la nouvelle fonction, ça boucle.
Mais tu peux permettre de passer un symbole dénotant une fonction à
MEMO, en effectuant l'indirection immédiatement:
    (defun memo (function-designator)
     (if (symbolp function-designator)
         (memo (symbol-function function-designator))
         ?))
> A part ça, j'ai fait un essai avec CLisp et tout se passe comme prévu :
> les valeurs sont accumulées au fur et à mesure au lieu d'être
> recalculées.
>
> Par contre si je compile la fonction fibonacci avec
> (compile 'fibonnaci) juste après l'avoir définie, avant de retoucher au
> symbole, ça ne fonctionne pas.
>

> C'est comme si lors de la compilation la référence vers la fonction
> était établie une fois pour toute. Je pensais au contraire que la
> fonction associée au symbole serait récupérée à chaque exécution de la
> fonction.
>
> Est-ce qu'effectivement la compilation fige les choses ou est-ce que
> j'ai manqué un élément ?

En effet.
La compilation par COMPILE d'une fonction peut effectuer une
optimization des appels à la fonction elle-même, y inclu l'optimization
des appels terminaux.
De même, dans une unité de compilation (soit par WITH-COMPILATION-UNIT,
soit par COMPILE-FILE), les fonctions présentes dans la même unité
peuvent être appelées directement sans passer par le symbole, ou même
être compilées en-ligne.
Pour éviter celà, on peut utiliser la déclaration NOT-INLINE.
> Il n'est donc pas possible de redéfinir une fonction et que toutes les
> fonctions qui la référence appellent la nouvelle version (à part sans
> doute en utilisant (funcall (symbol-function 'f))) ?

Si, c'est possible, avec NOT-INLINE.
    (defun fibonnaci (n)
     (declare (not-inline fibonnaci))
     (case n
        (0 0)
        (1 1)
        (otherwise (+ (fibonnaci (- n 1))
                     (fibonnaci (- n 2))))))
    (compile 'fibonnaci)
    (setf (symbol-function 'fibonnaci) (compile (memo 'fibonnaci)))
    (fibonnaci 10)
Mettre la déclaration not-inline à l'intérieur de la fonction ne la rend
NOT-INLINE que pour elle-même. Si tu veux qu'elle soit NOT-INLINE pour
les autres fonctions de la même unité de compilation il faut utiliser:
(declaim (not-inline fibonnaci))
au premier niveau.
--
__Pascal Bourguignon__                     http://www.informatimago.com/
A bad day in () is better than a good day in {}.




Codes en rapport sur CodeS-SourceS avec Compilation et désignationde fonctions

TROIS ALGORITHMES POUR LA SUITE DE FIBONACCI
Bonjour à tous ! Il existe au moins trois manières de programmer le calcul des termes de la suite...

FIBONACCI ITÉRATIF ET RÉCURSIF
Ce petit bout de script permet de calculer de différentes façons les termes de la suite de fibonacci...

LA SUITE DE FIBONACCI
J'avais rien à faire alors j'ai décider de faire un truc à 10 francs cinquantes : afficher la suite ...

SUITE DE FIBONACCI (SOUS BORLAND C++)
La suite de Fibonacci est définie par récurrence par : u(0)=1 u(1)=1 u(n)=u(n-1)+u(n-2) Compilé ...

POTENTIOMETRE
Comme le nom indique, c'est un potentiometre rotatif. La valeur prise est comprise entre -100 et 100...

Les discussions similaires sur CodeS-SourceS à Compilation et désignationde fonctions

Fibonacci en C sur visual C++
je cherche à écrire sur visual C++ un programme qui afficherais les n premiers nombres de la suite de Fibonacci avec n choisi par l'utilisateur. Mon principal problème est que je dois réaliser ce p...

demande dans programme en C++
Rohit slt .je un etudiant en licence Informatique . je cherche une classe Bigint en C++ pour calculer la multiplication des Bigint ,ses bigint sont par exemple F(100)et F(90) sachant que F est la fo...

Le compilateur qui ne modifie pas le source
Salut à tous, J'ai constaté des problèmes récurrents avec Indy : *Il ne modifie pas tjs l'executable lors de la compilation. Je m'explique : par exemple vous modifier une fonction et quand ...

Suite de Fibonacci
Bonjour tout le monde je suis en train d'élaborer un programme qui simule une suite de Fibonacci et quand j'execute le programme il m'affiche des résultats négatifs à partir du 60e terme par là ,est-c...

browser toolkit
Hello tous, Voilà j'ai un petit problème, je suis sur qu'une solution existe mais je n'arrive pas à la mettre en place. Je compile des sources avec la chaine d'outils de vs6 et je genere les .bsc ...

javascript"ex"
bonjour!!!! je souhaite avoir une réponse à cette exercice :      On rappelle que la suite de Fibonacci est défini dans N* par:                         U1=1 ; U2=1                         Un+2=Un+...

multiligne
Bonjour   Sos   J'ai un petit problème avec une table en access et vb.net   J'entre un texte dans un ric...

Mapping champ Memo
J'ai un champ de type Memo dans un base access. quel type je dois utiliser dans un GetType pour ces champs ? Dim col3 As New Data.DataColumn("Territory Description", GetType(String)) Evidement St...

HELP
 Je suis une étudiante en L2 et je cherche le programme de la Suite de fibonacci en ARM/langage d'assemblage;Merci, c'est urgent....

Symbole des ressources
Bonjour, je débute en programmation C#. J'aimerai utiliser les symboles des ressources (IDB_BITMAP1) dans mon programme (windows forms). Mais j'ai une erreur à la compilation, me symboles ne sont...



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,13 sec