Your Federal Quarterly Tax Payments are due April 15th Get Help Now >>

Cours IFT459 Concepts de langages de programmation Examen périodique by klutzfu59

VIEWS: 5 PAGES: 7

									                                   Cours: IFT459
                       Concepts de langages de programmation
                                 Examen périodique
                             Université de Sherbrooke
                   Département de mathématiques et d’informatique
Date : Le lundi le 23 juin 2003,                                 Heure : 9 h à 10 h 50
Local :   D7-3021
Prof : André Mayers

                                             Questionnaire
Lisez attentivement ce qui suit.
Toutes les notes personnelles ainsi que les manuels sont interdits.
La correction vise à évaluer votre maîtrise des concepts des langages de programmation donc vous devez
mettre en relief ces concepts dans vos réponses.
Cet examen contient 25 questions de 1 point et compte pour 25 % des points de la note finale.
Il n’y a pas de demi-point lors de l’évaluation.
Toutes vos réponses doivent apparaître sur ce questionnaire aux endroits indiqués. Les réponses apparais-
sant ailleurs ne seront pas considérées.
En incluant le présent en-tête, ce questionnaire contient 7 pages.
Écrivez votre nom sur chaque page.


NOM : ___________________________________________
MATRICULE: __________________________.




                                                   page 1
Nom: _______________________________________



1. Dans l’expression ci-dessous, identifiez les                variables libres     en les encerclant,

    les variables liées en les encadrant, et les déclarations de variables en les soulignant.

               (let ((toto        (lambda (x            y)

                                     (let ((z           3))

                                        (+ x      y          z))

                                    (lambda ( u )(*                z   y     u    )))))

                  (toto     x     4))



2. Que devrait retourner l’évaluation de l’expression suivante ?
    (un-lexical-address
      '(lambda (aa bb cc)
                  (lambda (a b c)
                    (if ((eqv? free)
                          (: 1 0) (: 0 0))
                        (lambda (x y)
                           ((+ free) ((: 0 0) ((: 0 1) (: 2 2)))))
                        ((cons free) ((x free) (: 1 0)))))))
   Écrivez votre réponse ci-dessous.




3. Le code de l’interpréteur d’un étudiant retourne (booléen 1) pour l’évaluation de l’expression
   less?(3, 5). Le type true de cet étudiant est opaque. Discutez.




                                               page 2
Nom: _______________________________________


4. Après avoir évalué l’expression suivante,
       (define-datatype bintree bintree?
          (leaf-node
            (datum number?))
          (interior-node
            (key symbol?)
            (left bintree?)
            (right bintree?)))
       (define feuille4 (leaf-node 3))
   que retourne l’évaluation de (leaf-node? feuille4)



5. Soit t1 un type de donnée, soit o1 une valeur de type t1.
   Est-ce que le programme ci-dessous, vous permet d’affirmer que les valeurs de type t1 sont des objets
                                         let x = o1
                                             y = 2
                                         in (f x y)

   de première classes? Jusitifez.




6. En vous basant sur le code de lambda-calculus-subst donné en annexe, que retourne
  (define (subs-test exp subst-exp subst-id)
    (let ((exp1 (parse-expression exp))
          (subst-exp1 (parse-expression subst-exp)))
      (unparse-expression (lambda-calculus-subst exp1 subst-exp1 subst-id))))

  (subs-test (lambda (y) ((lambda (x) (* z x)) (x y))) (y z) x)                                 ?




7. Que retourne l’évaluation de proc (x,y) +(x,y) avec l’interpréteur 3.5




                                                page 3
Nom: _______________________________________


8. Quelle est la principale caractéristique des environnements étendus récursivement ?
   Soyez précis.




9.    Pourquoi l’affectation, est-elle utile dans un langage informatique ? Ne pourrait-on pas tou-
     jours se contenter de créer de nouvelles liaisons (bindings) ?




10. Dans les langages où les déclarations de variables ont une portée dynamique, la valeur d’une
    référence de variable x lors d’une évaluation est déterminée par (Faites un X sur votre choix)
    a) le texte du programme
    b) la précédente déclaration d’une variable x
    c) la valeur la plus récente prise par x lors de l’exécution
    d) les réponses a) et b)

11. Les proc-exp et les closures sont deux types de données reliées au concept de procédure. Quelle
    est la différence importante entre ces deux types ?




12. Quels sont les trois éléments (type de donnée ou fonctions) qui permettent de définir la
    sémantique d’une procédure ?




13. Dans l’évaluation de l’expression (g 3 4) du programme ci-dessous, identifiez :
                           let g = proc (x,y) +(x,y)
                           in (g +(3,4) 5)

     a) les paramètres formels :




                                               page 4
Nom: _______________________________________


   b) les opérandes :
   c) les arguments :

14. Dans l’interpréteur de la section 4.2, quels sont les fonctions scheme qui définissent la séman-
    tique du langage que l’on construit ?



15. Qu’est-ce qu’une erreur de type ? Illustrez à l’aide d’un exemple.




16. Dans le programme suivant, soulignez les expressions de type.
                         letrec int fact (int x) =
                                      if zero?(x)
                                      then 1
                                      else *(x,(fact sub1(x)))
                         in fact


17. Quelle est la différence entre les types de donnée type-exp et type ?




18. Que retourne l’évaluation du programme avec l’interpréteur de la section 4.2 ?
                        letrec int fact (int x) =
                                     if zero?(x)
                                     then 1
                                     else *(x,(fact sub1(x)))
                        in fact


19. Quelle est l’utilité de la fonction type-check ?




                                                page 5
Nom: _______________________________________


20. Que retourne l’évaluation du programme suivant ?
                        class class1 extends object
                          method initialize () 1
                          method meth1 () 12
                          method meth2 () 13
                          method meth3 () send self meth2 ()
                        class c2 extends c1
                          method initialize () 5
                          method m2 () 7
                        let o2 = new c2 ()
                        in send o2 m3())




21. Que retourne l’évaluation du programme suivant ?
                        class class1 extends object
                          method initialize () 1
                          method meth1 () send self meth2()
                          method meth2 () 13
                        class c2     extends c1
                          method     meth1 () 22
                          method     meth2 () 23
                          method     meth3 () super meth1()
                        class c3 extends c2
                          method meth1 () 32
                          method meth2 () 33
                        let o3 = new c3 ()
                        in send o3 meth3()




22. Caractérisez par une phrase le concept de classe.




23. Caractérisez par une phrase le concept d’héritage.




24. Caractérisez par une phrase le concept de variable d’instance.




                                               page 6
Nom: _______________________________________


25. Quelle est la différence entre méthode et message ?




                                               page 7

								
To top