SlideServe
Menu
Préférences
© SlideServe · v2026

Functional Type Checking in a Typed Language

hashim avatar
9 diapositives · 216 Views · Aug 28, 2014

Learn about type checking in a functional language, defining types, grammar for types, and examples of typed expressions.

Functional Type Checking in a Typed Language - slide 1
01 / 9Functional Type Checking in a Typed Language
1 / 17

Télécharger la présentation

Functional Type Checking in a Typed Language
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  1. 4.2 Type Checking • Recall type of if statement: (type-of-expression <<test-exp>> tenv) = bool (type-of-expression <<true-exp>> tenv) = x (type-of-expression <<false-exp>> tenv) = x (type-of-expression if <<test-exp thentrue-expelsefalse-exp>> tenv) = x

  2. 4.2 Type Checking • Will want to check the type of all expressions. • Some expressions (proc, let/letrec) will need to declare types. • Others (if, application) will know about types from sub-expressions. • Language of this chapter is functional, not OO.

  3. Recall grammar for type declarations: <type-exp> ::= int int-type-exp () <type-exp> ::= bool bool-type-exp () <type-exp> ::= ({<type-exp>}*(*)-> <type-exp>) proc-type-exp (arg-texps result-texp) e.g.,(int*int) -> bool • Now can write grammar for typed language:

  4. Grammar for Typed Language <expression> ::= true true-exp <expression> ::= false false-exp <expression> ::= proc ({<type-exp> <identifier>}*(,)) <expression> proc-exp (arg-texps ids body)

  5. Grammar for Typed Language <expression> ::= letrec {<type-exp> <identifier> ({ <type-exp> <identifier>}*(,))= <expression>}* in <expression> letrec-exp (result-texps proc-names arg-texpss idss bodies letrec-body)

  6. Grammar for Typed Language • Examples: (1) proc (int x) add1(x) (2) letrec int fact (int x) = if zero?(x) then 1 else *(x, (fact sub1(x))) in (fact 3) • Q: Why don't we need to say int proc in (1) ?

  7. Data Structures for Typed Language • Need a data structure for types. • Recall that types are either primitives (int, bool) • or procedures/functions over types: int->bool (define-datatype type type? (atomic-type (name symbol?)) ; int, bool, ... (proc-type (arg-types (list-of type?)) (result-type type?)))

  8. Now can define as many primitive types as we like: (define int-type (atomic-type 'int)) (define bool-type (atomic-type 'bool)) • Checking type equality can be done using equal? (define check-equal-type! (lambda (t1 t2) (if (not (equal? t1 t2)) (eopl:error ...)))) • Q: why ! in check-equal-type! • Now can write type-of-expression :

  9. (define type-of-expression (lambda (exp tenv) (cases expression exp (lit-exp (number) int-type) (true-exp () bool-type) (false-exp () bool-type) (var-exp (id) (apply-tenv tenv id))