overview language perspectives
play

Overview Language Perspectives Input Processor Output ! - PDF document

Overview Language Perspectives Input Processor Output ! Imperative: Mode of computation - a variable (state) CSCI: 4500/6500 Programming Von Neumann Machines Memory modify variables in memory Languages Turing machines - imperative -


  1. Overview Language Perspectives Input Processor Output ! Imperative: Mode of computation - a variable (state) CSCI: 4500/6500 Programming » Von Neumann Machines Memory – modify variables in memory Languages » Turing machines - imperative - changes values in cells (variables) on tape Input Program (a function) Output ! Functional: Mode of computation - a function Functional Programming Languages » Lambda calculus » apply a function (a program) to transform its Part 1: Introduction input (parameters) to output (result) ! Relational: Mode of computation - constraints » programmer writes set of axioms that allow the computer to discover a constructive proof for a particular set of inputs Thanks again to Profs David Evan ’ s, University Virginia and Prof. Sebesta, author of our other book 1 2 Maria Hybinette, UGA Maria Hybinette, UGA Functional programming: Focus Functional Programming on Functions ! An object is first class (no restriction on use) when: ! Do everything by using functions and » can be created during execution (run time) evaluate them » stored in data structures or in variables » Great advantages: » can be used as parameters or inputs to other functions – no side effects » can be returned – no mutable state ! Higher order functions (operates on other functions) ! Based on “ mathematical functions ” either or both: » Historically from Church ’ s model of computation called the lambda calculus ( ! - calculus) » Input: can take other functions as arguments – Study of function application and recursion » Output: and/or return function as results ! Example Languages: LISP, Scheme, FP, ML, Miranda and Haskell ! Higher order functions are building blocks of functional languages. 3 4 Maria Hybinette, UGA Maria Hybinette, UGA History: LISP first functional History: LISP first functional ‘ programming ’ language ‘ programming ’ language ILP – Simon & Newell ’ d assembly ! Lists are delimiting their items in parenthesis. language –first functional based PL » Simple list: (A B C) // 3 elements ! LISt Processing Language (McCarthy (MIT) 1959) » Complex list (list of lists): (foo (bar 1) 2) // 3 elements » Processes data in lists ! Both functions and data are represented in the same form, ! Two objects (originally) or data types: e.g.: » Atoms (number of a symbol) and » (A B C) as data is a simple list of 3 atoms: A, B and C » Lists (sequence of elements) » (A B C) as a function is interpreted as the function named “ A ” » S-expression (atoms and pair) = atom a symbol (upper case), pair applied to two parameters, B and C, e.g., (+ 4 5) was parenthesized. – Cambridge Polish ( parenthesized prefix notation) » M-expressions (meta variables (lower case) and argument list) ! Polish Notation :: Prefix notation : + 3 4 ! Lists are delimiting their items in parenthesis. ! Cambridge Notation(add parenthesis) :: (+3 4) » Simple list: (A B C) // 3 elements ! Reverse Polish Notation :: 3 4 + » Complex list: (foo (bar 1) 2) // 3 elements » 3 6 / -> / 3 6 -> 0.5 » 6 3 / -> / 6 3 -> 2 5 6 Maria Hybinette, UGA Maria Hybinette, UGA

  2. LISP (implementation) Variants of LISP ! List forms parenthesized ! Pure (original Lisp) collection of sub lists and/or atoms: » purely functional A B C D – no imperative features (e.g., NO assignment statement) ! Stored as a linked list » dynamically scoped (as all early versions of LISP) more on each node has two this next slide. pointers ! All other Lisp ’ s have some imperative features (e.g., » First pointer to a A D data is contained in a variable, assignment statement) representation of the element (e.g., symbol or ! COMMON Lisp (statically scoped) number) or another » brought all LISPs under a common umbrella sublist – HUGE, and very complicated, provides dynamic scope as an » Second pointer next B C E option element of list ! Scheme a mid-1970s dialect of LISP designed to be ! Example: cleaner, more modern and simpler version than dialects » (A B C D) of Lisps F G » (A (B C) D ( E ( F G ) )) » Statically scoped and tail recursive 7 8 Maria Hybinette, UGA Maria Hybinette, UGA Scope: A Preview (what is the value of a ) Introduction to Scheme a: integer // global ! Static scoping (what we procedure first() ! Mid-1970s dialect to Lisp, designed to be cleaner, are used to) { more modern and simpler than contemporary » Variables refers to its a = 1 // global or local? } nearest enclosed binding dialects of LIPS procedure second() » Lexiographic -- Compile { ! Uses static scoping (lexical binding determined time a: integer // local first() by reading program text) and is ‘ tail recursive’. ! Dynamic scoping: } a = 2 » Refers to the closest ! Functions are first class entities if read_integer() > 0 active binding second() // 2 for dynamic » Binding name-object » Can be values of expressions and elements of a list else depends on the flow of first() // 1 for dynamic » Can be assigned variables and passed as parameters control at run time and print(“%d\n”, a) the order subroutines are Static: always prints 1 : a is global scope ! Have some imperative features (but will not focus called, of a is closest enclosed a, so for “ first ”’ s a refers to global a on these). Dynamic: prints 1 or 2: if we go to second first, first ’ s a refers to second ’ s local a (closest active binding and 9 10 does not change the global a) Maria Hybinette, UGA Maria Hybinette, UGA How do we create more complex Scheme functions? ! Lambda ( λ ) expressions – creates functions ! Is a collection of function definitions and lots » ( lambda ( parameters ) expression ) of parenthesis. » ( lambda (x) ( * x x ) ) » primitive functions (a form of an expression) – is a nameless function that returns the square of its – +, - * parameters (nameless don ’ t need to use it again). – can be applied like normally containing a list that – ( + 3 4 ) contains the actual parameters – ( ( + 3 4 ) ) -> error ! Calls + with 3 and 4 as parameters, then call 7 as a 0 parameter function = a run time error » A simple expression could just be value – 5 – 5 is evaluated to be “ 5 ” 11 12 Maria Hybinette, UGA Maria Hybinette, UGA

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend