Functional Pls Introduction to Haskell

Total Page:16

File Type:pdf, Size:1020Kb

Functional Pls Introduction to Haskell Thoughts on Assignment 4 PL Category: Functional PLs Introduction to Haskell CS F331 Programming Languages CSCE A331 Programming Language Concepts Lecture Slides Friday, February 22, 2019 Glenn G. Chappell Department of Computer Science University of Alaska Fairbanks [email protected] © 2017–2019 Glenn G. Chappell Thoughts on Assignment 4 Introduction In Assignment 4 you will be writing a Recursive-Descent parser, in the form of Lua module parseit. It will be similar to module rdparser4 (written in class), but it will involve a different grammar & AST specification. In Assignment 6 you will write an interpreter that takes, as input, an AST of the form your parser returns. The result will be an implementation of a programming language called Jerboa. Module parseit is to parse a complete programming language, while module rdparser4 only parses expressions. Nonetheless, Jerboa has expressions, and they work in much the same way as those handled by rdparser4. I suggest using file rdparser4.lua as a starting point for Assignment 4. 22 Feb 2019 CS F331 / CSCE A331 Spring 2019 2 Thoughts on Assignment 4 The Goal Here is a sample Jerboa program, again. # Function fibo # Main Program # Given k, return F(k), where # F(n) = nth Fibonacci no. # Get number of Fibos to output def fibo() write("How many Fibos to print? ") a = 0 # Consecutive Fibos n = readnum() b = 1 write(cr) i = 0 # Loop counter while i < k # Print requested number of Fibos c = a+b # Advance j = 0 # Loop counter a = b while j < n b = c k = j i = i+1 # ++counter write("F(",j,") = ",fibo(),cr) end j = j+1 # ++counter return a # Result end end 22 Feb 2019 CS F331 / CSCE A331 Spring 2019 3 Thoughts on Assignment 4 The Grammar (1) program → stmt_list (2) stmt_list → { statement } (3) statement → ‘write’ ‘(’ write_arg { ‘,’ write_arg } ‘)’ (4) | ‘def’ ID ‘(’ ‘)’ stmt_list ‘end’ (5) | ‘if’ expr stmt_list { ‘elseif’ expr stmt_list } [ ‘else’ stmt_list ] ‘end’ (6) | ‘while’ expr stmt_list ‘end’ (7) | ‘return’ expr (8) | ID ( ‘(’ ‘)’ | [ ‘[’ expr ‘]’ ] ‘=’ expr ) (9) write_arg → ‘cr’ (10) | STRLIT (11) | expr (12) expr → comp_expr { ( ‘&&’ | ‘||’ ) comp_expr } (13) comp_expr → ‘!’ comp_expr (14) | arith_expr { ( ‘==’ | ‘!=’ | ‘<’ | ‘<=’ | ‘>’ | ‘>=’ ) arith_expr } (15) arith_expr → term { ( ‘+’ | ‘-’ ) term } (16) term → factor { ( ‘*’ | ‘/’ | ‘%’ ) factor } (17) factor → ‘(’ expr ‘)’ (18) | ( ‘+’ | ‘-’ ) factor (19) | NUMLIT (20) | ( ‘true’ | ‘false’ ) (21) | ‘readnum’ ‘(’ ‘)’ (22) | ID [ ‘(’ ‘)’ | ‘[’ expr ‘]’ ] 22 Feb 2019 CS F331 / CSCE A331 Spring 2019 4 Thoughts on Assignment 4 Common Mistakes The most common mistake I made when writing module parseit was to return only one value from a parsing function. § A parsing function will always return two values: boolean & AST. § If the boolean is true, then the AST needs to be in the proper form. § If the boolean is false, then the AST can be anything (it might as well be nil). A mistake I have seen students make on an assignment of this kind involves failing to “trust” their parsing functions in some way. § If you need something parsed, then call the appropriate parsing function, and trust that function to do it right. § Do not try to do a function’s work for it. § Do not rewrite something that has already been written. 22 Feb 2019 CS F331 / CSCE A331 Spring 2019 5 Thoughts on Assignment 4 Parsing end Three kinds of Jerboa statements are terminated with an end keyword: § Function definitions: def ID() … end § If-statements: if … elseif … else … end § While-loops: while … end Other kinds of statements have no end. This means, for example, that you generally do not want to exit the parsing function early if you think the if-statement is over. So code like the following is not good. if not matchString("else") then return true, ast end 22 Feb 2019 CS F331 / CSCE A331 Spring 2019 6 Thoughts on Assignment 4 Some Code I have posted a file containing a portion of my version of parseit.lua. See assn4_code.txt. 22 Feb 2019 CS F331 / CSCE A331 Spring 2019 7 Review Overview of Lexing & Parsing Parsing Lexer Parser Character Lexeme AST Stream Stream or Error cout << ff(12.6); cout << ff(12.6); expr id op id lit punct op op binOp: << Two phases: expr expr § Lexical analysis (lexing) id: cout funcCall § Syntax analysis (parsing) id: ff expr The output of a parser is often an abstract numLit: 12.6 syntax tree (AST). Specifications of these can vary. 22 Feb 2019 CS F331 / CSCE A331 Spring 2019 8 Review The Basics of Syntax Analysis — Categories of Parsers Parsing methods can be divided into two broad categories. Top-Down § Go through derivation from top to bottom, expanding nonterminals. § Important subcategory: LL parsers (read input Left-to-right, produce Leftmost derivation). § Often hand-coded—but not always. § Method we look at: Predictive Recursive Descent. Bottom-Up § Go through the derivation from bottom to top, reducing substrings to nonterminals. § Important subcategory: LR parsers (read input Left-to-right, produce Rightmost derivation). § Almost always automatically generated. § Method we look at: Shift-Reduce. 22 Feb 2019 CS F331 / CSCE A331 Spring 2019 9 Review Shift-Reduce Parsing [1/2] We looed at a class of table-based bottom-up parsing algorithms. Tables are produced before execution. Parser execution uses a state machine with a stack, called a Shift- Reduce parser. The name comes from two operations: § Shift. Advance to the next input symbol. § Reduce. Apply a production: replace substring with nonterminal. In the form we presented it, Shift-Reduce parsing is an LR parsing method that can handle all LR(1) grammars. 22 Feb 2019 CS F331 / CSCE A331 Spring 2019 10 Review Shift-Reduce Parsing [2/2] Generating Shift-Reduce parsing tables in a straightforward way tends to result in far too many states. Various ways of generating smaller tables are known, but these do not work for all LR(1) grammars. Probably the most common way of generating smaller parsing tables is Lookahead LR (LALR) [F. DeRemer 1969]. During parsing-table generation, a kind of hypothetical lookahead is done, with the results used to collapse multiple states into a single state. The LR(k) grammars for which this gives correct results are the LALR(k) grammars. The Yacc (“Yet Another Compiler Compiler”) parser generator and its descendants (GNU Bison, etc.), use LALR. 22 Feb 2019 CS F331 / CSCE A331 Spring 2019 11 Review Parsing Wrap-Up — Efficiency of Parsing Counting the input size as the number of lexemes/characters: Practical parsers (and lexers) run in linear time. This includes Predictive Recursive-Descent parsers and Shift- Reduce parsers. Various parsing methods are known that can handle all CFLs (Ealey, CYK, GLR); these generally run in cubic time. However, some of them achieve linear time for some grammars and can thus be considered practical. An oddity is Valiant’s Algorithm, which can parse any CFL, using matrix multiplication. Fast matrix multiplication algorithms allow it to be, roughly, Θ(n2.372864). However, this speed-up only matters for extremely large input. 22 Feb 2019 CS F331 / CSCE A331 Spring 2019 12 Review Parsing Wrap-Up — Parsing in Practice In my experience, the parser used in a production compiler is generally one of the following two kinds. § A hand-coded top-down parser using Recursive Descent—or something similar. § An automatically generated bottom-up parser that runs as a table- based Shift-Reduce parser—or something similar. Producing a parser is a very practical skill, because: Parsing is making sense of input. And that is something that computer programs need to do a lot. 22 Feb 2019 CS F331 / CSCE A331 Spring 2019 13 Review PL Feature: Type System The following type-related terms will be particularly important in the upcoming material. § Type § Static typing § Manifest typing vs. implicit typing § Type inference § Type annotation § First-class functions § Sound type system See A Primer on Type Systems for full information on this topic. 22 Feb 2019 CS F331 / CSCE A331 Spring 2019 14 PL Category: Functional PLs Background [1/4] It is likely that your programming experience has largely involved imperative programming: writing code to tell a computer what to do. Running a program is thus saying to a computer, “Follow these instructions.” This is the predominant paradigm in PLs like Java, C++, and Lua. An alternative is declarative programming: writing code to tell a computer what is true. Running a program might be thought of in terms of asking a question. The most important declarative programming style is functional programming. Later in the semester, we will look at logic programming, another declarative style. 22 Feb 2019 CS F331 / CSCE A331 Spring 2019 15 PL Category: Functional PLs Background [2/4] Functional programming (FP) is a programming style that generally has the following characteristics. § Computation is considered primarily in terms of the evaluation of functions—as opposed to execution of tasks. § Functions are a primary concern. Rather than mere repositories for code, functions are values to be constructed and manipulated. § Side effects* are avoided. A function’s only job is to return a value. *A function has a side effect when it makes a change, other than returning a value, that is visible outside the function. 22 Feb 2019 CS F331 / CSCE A331 Spring 2019 16 PL Category: Functional PLs Background [3/4] One can do functional programming, in some sense, in just about any PL. However, some PLs support it better than others. A functional programming language is a PL designed to support FP well. This is thus a somewhat vague term. § No one calls C a functional PL. § Opinions vary about JavaScript. § Everyone agrees that Haskell is a functional PL. PLs generally agreed to be functional include Haskell, the ML family (ML, OCaml, F#), R, and Miranda. In addition, the Lisp family of PLs (Common Lisp, Emacs Lisp, Scheme, Clojure, Racket, Logo, Arc) generally offers excellent support for FP, but is usually considered as a separate category.
Recommended publications
  • Comparison of Programming Languages
    ECE326 PROGRAMMING LANGUAGES Lecture 1 : Course Introduction Kuei (Jack) Sun ECE University of Toronto Fall 2019 Course Instructor Kuei (Jack) Sun Contact Information Use Piazza Send me (Kuei Sun) a private post Not “Instructors”, otherwise the TAs will also see it http://piazza.com/utoronto.ca/fall2019/ece326 Sign up to the course to get access Office: PRA371 (office hours upon request only) Research Interests Systems programming, software optimization, etc. 2 Course Information Course Website http://fs.csl.toronto.edu/~sunk/ece326.html Lecture notes, tutorial slides, assignment handouts Quercus Grade posting, course evaluation, lab group sign-up! Piazza Course announcement, course discussion Assignment discussion Lab TAs will read and answer relevant posts periodically 3 Course Information No required textbook Exam questions will come from lectures, tutorials, and assignments See course website for suggested textbooks Lab sessions Get face-to-face help from a TA with your assignments Tutorials Cover supplementary materials not in lectures Go through sample problems that may appear on exams 4 Volunteer Notetakers Help your peers Improve your own notetaking skills Receive Certificate of Recognition Information: https://www.studentlife.utoronto.ca/as/note-taking Registration: https://clockwork.studentlife.utoronto.ca/custom/misc/home.aspx Notetakers needed for lectures and tutorials 5 Background Programming Languages A formal language consisting of a instructions to implement algorithms and perform
    [Show full text]
  • Analytická Řešení Vybraných Typů Diferenciálních Rovnic
    VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA STROJNÍHO INŽENÝRSTVÍ FACULTY OF MECHANICAL ENGINEERING ÚSTAV AUTOMATIZACE A INFORMATIKY INSTITUTE OF AUTOMATION AND COMPUTER SCIENCE ANALYTICKÁ ŘEŠENÍ VYBRANÝCH TYPŮ DIFERENCIÁLNÍCH ROVNIC: SOFTWAROVÁ PODPORA PRO STUDENTY TECHNICKÝCH OBORŮ ANALYTICAL SOLUTIONS FOR SELECTED TYPES OF DIFFERENTIAL EQUATIONS: SOFTWARE SUPPORT TOOL FOR STUDENTS IN TECHNICAL FIELDS BAKALÁŘSKÁ PRÁCE BACHELOR'S THESIS AUTOR PRÁCE Daniel Neuwirth, DiS. AUTHOR VEDOUCÍ PRÁCE Ing. Jan Roupec, Ph.D. SUPERVISOR BRNO 2017 ABSTRAKT Cílem této práce bylo vytvořit počítačovou aplikaci s jednoduchým uživatelským rozhraním, určenou pro řešení vybraných typů diferenciálních rovnic, jejíž výstup není omezen na prosté zobrazení konečného výsledku, nýbrž zahrnuje i kompletní postup výpočtu, a díky tomu může sloužit jako podpůrná výuková pomůcka pro studenty vysokých škol. ABSTRACT The aim of this thesis was to create a computer application with a simple user interface for solving selected types of differential equations, whose output is not limited to display a final result only, but also includes a complete calculation procedure and therefore can serve as a supportive teaching aid for university students. KLÍČOVÁ SLOVA diferenciální rovnice, počítačový algebraický systém, programovací jazyk C++ KEYWORDS differential equation, computer algebra system, C++ programming language BIBLIOGRAFICKÁ CITACE NEUWIRTH, Daniel. Analytická řešení vybraných typů diferenciálních rovnic: softwarová podpora pro studenty technických oborů. Brno: Vysoké učení technické v Brně, Fakulta strojního inženýrství, 2017. 77 s. Vedoucí bakalářské práce Ing. Jan Roupec, Ph.D. PODĚKOVÁNÍ Rád bych poděkoval vedoucímu své bakalářské práce Ing. Janu Roupcovi, Ph.D. za odborné vedení při tvorbě této práce, za cenné rady a návrhy ke zlepšení, drobné korektury a zejména za jeho entuziasmus, se kterým k tomuto procesu přistupoval.
    [Show full text]
  • 4500/6500 Programming Languages What Are Types? Different Definitions
    What are Types? ! Denotational: Collection of values from domain CSCI: 4500/6500 Programming » integers, doubles, characters ! Abstraction: Collection of operations that can be Languages applied to entities of that type ! Structural: Internal structure of a bunch of data, described down to the level of a small set of Types fundamental types ! Implementers: Equivalence classes 1 Maria Hybinette, UGA Maria Hybinette, UGA 2 Different Definitions: Types versus Typeless What are types good for? ! Documentation: Type for specific purposes documents 1. "Typed" or not depends on how the interpretation of the program data representations is determined » Example: Person, BankAccount, Window, Dictionary » When an operator is applied to data objects, the ! Safety: Values are used consistent with their types. interpretation of their values could be determined either by the operator or by the data objects themselves » Limit valid set of operation » Languages in which the interpretation of a data object is » Type Checking: Prevents meaningless operations (or determined by the operator applied to it are called catch enough information to be useful) typeless languages; ! Efficiency: Exploit additional information » those in which the interpretation is determined by the » Example: a type may dictate alignment at at a multiple data object itself are called typed languages. of 4, the compiler may be able to use more efficient 2. Sometimes it just means that the object does not need machine code instructions to be explicitly declared (Visual Basic, Jscript
    [Show full text]
  • Sqlite 1 Sqlite
    SQLite 1 SQLite SQLite Developer(s) D. Richard Hipp Initial release August 2000 [1] Latest stable 3.8.4.2 (March 26, 2014) [±] Written in C Operating system Cross-platform Size 658 KiB Type RDBMS (embedded) License Public domain [2] Website sqlite.org SQLite (/ˌɛskjuːɛlˈlaɪt/ or /ˈsiːkwəl.laɪt/) is a relational database management system contained in a C programming library. In contrast to other database management systems, SQLite is not a separate process that is accessed from the client application, but an integral part of it. SQLite is ACID-compliant and implements most of the SQL standard, using a dynamically and weakly typed SQL syntax that does not guarantee the domain integrity. SQLite is a popular choice as embedded database for local/client storage in application software such as web browsers. It is arguably the most widely deployed database engine, as it is used today by several widespread browsers, operating systems, and embedded systems, among others. SQLite has many bindings to programming languages. The source code for SQLite is in the public domain. Design Unlike client–server database management systems, the SQLite engine has no standalone processes with which the application program communicates. Instead, the SQLite library is linked in and thus becomes an integral part of the application program. (In this, SQLite follows the precedent of Informix SE of c. 1984 [3]) The library can also be called dynamically. The application program uses SQLite's functionality through simple function calls, which reduce latency in database access: function calls within a single process are more efficient than inter-process communication.
    [Show full text]
  • Gradual Security Typing with References
    2013 IEEE 26th Computer Security Foundations Symposium Gradual Security Typing with References Luminous Fennell, Peter Thiemann Dept. of Computing Science University of Freiburg Freiburg, Germany Email: {fennell, thiemann}@informatik.uni-freiburg.de Abstract—Type systems for information-flow control (IFC) The typing community studies a similar interplay between are often inflexible and too conservative. On the other hand, static and dynamic checking. Gradual typing [25], [26] is dynamic run-time monitoring of information flow is flexible and an approach where explicit cast operations mediate between permissive but it is difficult to guarantee robust behavior of a program. Gradual typing for IFC enables the programmer to coexisting statically and dynamically typed program frag- choose between permissive dynamic checking and a predictable, ments. The type of a cast operation reflects the outcome of conservative static type system, where needed. the run-time test performed by the cast: The return type of We propose ML-GS, a monomorphic ML core language with the cast is the compile-time manifestation of the positive test; references and higher-order functions that implements gradual a negative outcome of the test causes a run-time exception. typing for IFC. This language contains security casts, which enable the programmer to transition back and forth between Disney and Flanagan propose an integration of security static and dynamic checking. types with dynamic monitoring via gradual typing [11]. Such In particular, ML-GS enables non-trivial casts on reference an integration enables the stepwise introduction of checked types so that a reference can be safely used everywhere in a security policies into a software system.
    [Show full text]
  • PL Category: Functional Pls Introduction to Haskell
    PL Category: Functional PLs Introduction to Haskell CS F331 Programming Languages CSCE A331 Programming Language Concepts Lecture Slides Friday, February 21, 2020 Glenn G. Chappell Department of Computer Science University of Alaska Fairbanks [email protected] © 2017–2020 Glenn G. Chappell Review 2020-02-21 CS F331 / CSCE A331 Spring 2020 2 Review Overview of Lexing & Parsing Parsing Lexer Parser Character Lexeme AST or Stream Stream Error return (*dp + 2.6); //x return (*dp + 2.6); //x returnStmt key op id op num binOp: + lit punct punct unOp: * numLit: 2.6 Two phases: id: dp § Lexical analysis (lexing) § Syntax analysis (parsing) The output of a parser is typically an abstract syntax tree (AST). Specifications of these will vary. 2020-02-21 CS F331 / CSCE A331 Spring 2020 3 Review The Basics of Syntax Analysis — Categories of Parsers Parsing methods can be divided into two broad categories. Top-Down Parsers § Go through derivation top to bottom, expanding nonterminals. § Important subcategory: LL parsers (read input Left-to-right, produce Leftmost derivation). § Often hand-coded—but not always. § Method we look at: Predictive Recursive Descent. Bottom-Up Parsers § Go through the derivation bottom to top, reducing substrings to nonterminals. § Important subcategory: LR parsers (read input Left-to-right, produce Rightmost derivation). § Almost always automatically generated. § Method we look at: Shift-Reduce. 2020-02-21 CS F331 / CSCE A331 Spring 2020 4 Review Parsing Wrap-Up — Efficiency of Parsing Counting the input size as the number of lexemes/characters: Practical parsers (and lexers) run in linear time. This includes state-machine lexers, Predictive Recursive-Descent parsers and Shift-Reduce parsers.
    [Show full text]
  • Advanced Programming Principles CM20214
    In code bigclass x = new bigclass(1); x = new bigclass(2); or (setq x (make <bigclass> 1)) (setq x (make <bigclass> 2)) the memory allocated to the new class 1 is no longer accessible to the program It is garbage, so we need a garbage collector to search out inaccessible memory and reclaim it for the system GC Some languages have Garbage Collection, some don’t 1 / 214 It is garbage, so we need a garbage collector to search out inaccessible memory and reclaim it for the system GC Some languages have Garbage Collection, some don’t In code bigclass x = new bigclass(1); x = new bigclass(2); or (setq x (make <bigclass> 1)) (setq x (make <bigclass> 2)) the memory allocated to the new class 1 is no longer accessible to the program 2 / 214 GC Some languages have Garbage Collection, some don’t In code bigclass x = new bigclass(1); x = new bigclass(2); or (setq x (make <bigclass> 1)) (setq x (make <bigclass> 2)) the memory allocated to the new class 1 is no longer accessible to the program It is garbage, so we need a garbage collector to search out inaccessible memory and reclaim it for the system 3 / 214 Languages without integral GC include C, C++ In languages without GC, if you drop all references to an object, that’s the programmer’s problem The Java-like code above is also valid C++ Thus it is buggy C++ with a memory leak GC Languages with integral GC include Lisp, Haskell, Java, Perl 4 / 214 In languages without GC, if you drop all references to an object, that’s the programmer’s problem The Java-like code above is also valid C++ Thus it
    [Show full text]
  • The C++ Programming Language in Modern Computer Science
    Shayan Shajarian THE C++ PROGRAMMING LANGUAGE IN MODERN COMPUTER SCIENCE Faculty of Information Technology and Communication Sciences (ITC) Master of Science Thesis April 2020 1 ABSTRACT Shayan Shajarian: The C++ programming language in modern computer science Master of science thesis Tampere University Information Technology April 2020 This thesis has studied the C++ programming language’s usefulness in modern computer science both in suitability for developers and education by overviewing its history and main features and comparing it to its main alternatives. The research was mainly conducted with literature reviews and methods used for studying the subject where both quantitative in form of performance analysis and qualitative in the form of analysis of non-numeric attributes. This thesis has found that the C++ programming language is a very capable programming language for overall development, but the language’s popularity has shifted towards system-level programming while the language is losing popularity for higher-level applications. The C++ programming language is also quite complex, making it too difficult to learn for beginners. Despite the complexity, the C++ programming language remains a very good language in terms of education for students of computer science because the language gives a good overview of programming as a whole. Keywords: C++, computer science, software production, education of programming The originality of this thesis has been checked using the Turnitin OriginalityCheck service. 2 TIIVISTELMÄ Shayan Shajarian: The C++ programming language in modern computer science Diplomityö Tampereen yliopisto Ohjelmistotuotanto Huhtikuu 2020 Tämä diplomityö on tutkinut C++-ohjelmointikielen hyödyllisyyttä sekä modernissa ohjelmistotuotannossa, että työkaluna tietotekniikan ja ohjelmoinnin opetukseen. Tutkimus suoritettiin tutkimalla C++-ohjelmointikielen historiaa, kielen yleisiä ominaisuuksia ja vertailemalla sitä muihin ohjelmointikieliin.
    [Show full text]
  • Pluggable, Iterative Type Checking for Dynamic Programming Languages
    Pluggable, Iterative Type Checking for Dynamic Programming Languages Tristan Allwood ([email protected]) Professor Susan Eisenbach (supervisor) Dr. Sophia Drossopoulou (second marker) University of London Imperial College of Science, Technology and Medicine Department of Computing Copyright c Tristan Allwood, 2006 Project sources available at: /homes/toa02/project/fleece/ June 13, 2006 Abstract Dynamically typed programming languages are great. They can be highly expressive, incredibly flexible, and very powerful. They free a programmer of the chains of needing to explicitly say what classes are allowed in any particular point in the program. They delay dealing with errors until the last possible moment at runtime. They trust the programmer to get the code right. Unfortunately, programmers are not to be trusted to get the code right! So to combat this, programmers started writing tests to exercise their code. The particularly conscientious ones started writing the tests before the code existed. The problem is, tests are still code, and tests would still only point out errors at runtime. Of course, some of these errors would be silly mistakes, e.g. misspelled local variables; some would be slightly more complicated, but a person reading the code could notice them. They are errors that could be detected while a program was being written. Static type systems could help detect these mistakes while the programs were being written. Retrofitting a mandatory static type system onto a dynamically typed programming language would not be a popular action, so instead the idea of optional and then pluggable type systems was raised. Here the type systems can be applied to the language, but they don’t have to be.
    [Show full text]
  • Definition of a Type System for Generic and Reflective Graph
    Definition of a Type System for Generic and Reflective Graph Transformations Vom Fachbereich Elektrotechnik und Informationstechnik der Technischen Universitat¨ Darmstadt zur Erlangung des akademischen Grades eines Doktor-Ingenieurs (Dr.-Ing.) genehmigte Dissertation von Dipl.-Ing. Elodie Legros Geboren am 09.01.1982 in Vitry-le-Franc¸ois (Frankreich) Referent: Prof. Dr. rer. nat. Andy Schurr¨ Korreferent: Prof. Dr. Bernhard Westfechtel Tag der Einreichung: 17.12.2013 Tag der mundlichen¨ Prufung:¨ 30.06.2014 D17 Darmstadt 2014 Schriftliche Erklarung¨ Gemaߨ x9 der Promotionsordnung zur Erlangung des akademischen Grades eines Doktors der Ingenieurwissenschaften (Dr.-Ing.) der Technischen Uni- versitat¨ Darmstadt Ich versichere hiermit, dass ich die vorliegende Dissertation allein und nur unter Verwendung der angegebenen Literatur verfasst habe. Die Arbeit hat bisher noch nicht zu Prufungszwecken¨ gedient. Frederiksberg (Danemark),¨ den 17.12.2013 ..................................... Elodie Legros Acknowledgment My very special thanks go to my advisor, Prof. Dr. rer. nat. Andy Schurr,¨ who has supported me during all phases of this thesis. His many ideas and advices have been a great help in this work. He has always been available every time I had questions or wanted to discuss some points of my work. His patience in reviewing and proof-reading this thesis, especially after I left the TU Darmstadt and moved to Denmark, deserves my gratitude. I am fully convinced that I would not have been able to achieve this thesis without his unswerving support. For all this: thank you! Another person I am grateful to for his help is Prof. Dr. Bernhard Westfechtel. Reviewing a thesis is no easy task, and I want to thank him for having assumed this role and helped me in correcting details I missed in my work.
    [Show full text]
  • Type Systems Swarnendu Biswas
    CS 335: Type Systems Swarnendu Biswas Semester 2019-2020-II CSE, IIT Kanpur Content influenced by many excellent references, see References slide for acknowledgements. Type Error in Python def add1(x): Traceback (most recent call last): return x + 1 File "type-error.py", line 8, in <module> add1(a) class A(object): File "type-error.py", line 2, in add1 pass return x + 1 TypeError: unsupported operand type(s) for a = A() +: 'A' and 'int' add1(a) CS 335 Swarnendu Biswas What is a Type? Set of values and operations allowed on those values • Integer is any whole number in the range −231 ≤ 푖 < 231 • enum colors = {red, orange, yellow, green, blue, black, white} Few types are predefined by the programming language Other types can be defined by a programmer • Declaration of a structure in C CS 335 Swarnendu Biswas What is a Type? Pascal • If both operands of the arithmetic operators of addition, subtraction, and multiplication are of type integer, then the result is of type integer C • “The result of the unary & operator is a pointer to the object referred to by the operand. If the type of operand is X, the type of the result is a pointer to X.” Each expression has a type associated with it CS 335 Swarnendu Biswas The Meaning of Type • A type is a set of values Denotational • A value has a given type if it belongs to the set • A type is either from a collection of built-in types or a Structural composite type created by applying a type constructor to built-in types Abstraction- • A type is an interface consisting of a set of operations based
    [Show full text]
  • A Well-Typed Lightweight Situation Calculus∗
    A Well-typed Lightweight Situation Calculus∗ Li Tan Department of Computer Science and Engineering University of California, Riverside Riverside, CA, USA 92507 [email protected] Situation calculus has been widely applied in Artificial Intelligence related fields. This formalism is considered as a dialect of logic programming language and mostly used in dynamic domain model- ing. However, type systems are hardly deployed in situation calculus in the literature. To achieve a correct and sound typed program written in situation calculus, adding typing elements into the current situation calculus will be quite helpful. In this paper, we propose to add more typing mechanisms to the current version of situation calculus, especially for three basic elements in situation calculus: situations, actions and objects, and then perform rigid type checking for existing situation calculus programs to find out the well-typed and ill-typed ones. In this way, type correctness and soundness in situation calculus programs can be guaranteed by type checking based on our type system. This modified version of a lightweight situation calculus is proved to be a robust and well-typed system. 1 Introduction Introduced by John McCarthy in 1963 [10], situation calculus has been widely applied in Artificial Intelligence related research areas and other fields. This formalism is considered as a dialect of logic programming language and mostly used in dynamic domain modeling. Based on First Order Logic (FOL) [1] and Basic Action Theory [9], situation calculus can be used for reasoning efficiently by virtue of dynamic elements, such as actions and fluents. Basic concepts of situation calculus are fundamentals of First Order Logic and Set Theory in Mathematical Logic, which greatly facilitate the process of action-based reasoning in situation calculus.
    [Show full text]