CS 541 Lecture -*- Outline -*- * Naming (Schmidt 7.1) advert: naming essential to abstraction these techniques and concepts thus fundamental to seamntics ** Basic needs *** primitive set of names, way to combine them e.g., g(f(x)) *** abstraction: abbreviation of long names e.g., lambda calculus without names e.g., in FL, have proc, bind and rec ** Environment: Identifier -> (Denotable-value + Unbound) (maps to Expressible-value in FL) *** gives meaning to identifiers e.g., X := 2 may be many environment values during program evaluation e.g., recursion, nesting *** relationship between denotable and expressible values no reason that entities denotable by names should be same as entities computed by expressions let Denotable-value be entities denotable by names possible relationships between expressible and denotable values 1. equality 2. denotable contains expressible e.g., in language without first-class procedures 3. denotable subset of expressible e.g., cannot bind a name to an error or \bot 4. complex *** Changes to FL semantics (for this discussion) p in Procedure = Denotable-value -> Expressible-value u in Environment = Identifier -> (Denotable-value + Unbound) (another tack would be to let Unbound be summand of DV)