CSCIGA Final Exam


 Tracy Richards
 1 years ago
 Views:
Transcription
1 CSCIGA Final Exam Instructor: Thomas Wies Name: Sample Solution ID: You have 110 minutes time. There are 7 assignments and you can reach 110 points in total. You can solve the exercises directly on the exam sheet. If you need additional paper, ask the instructor. Do not forget to put your name and ID on every page that you hand in. assignment Σ Grade max. points points Good Luck! 1
2 Assignment 1 (a) Write a polymorphic ML function Programming in ML (25 Points) zip: a list * b list > ( a * b) list that takes a pair of lists and zips it to a list of pairs. The following examples demonstrate the intended behavior of zip:  zip ([1,2,3], [4,5,6]); val it = [(1,4),(2,5),(3,6)] : (int * int) list  zip ([1,2], [4,5,6]); val it = [(1,4),(2,5)] : (int * int) list  zip ([1,2,3], [] : int list); val it = [] : (int * int) list Note that if the input lists do not have the same length, then the remaining elements of the longer list are dropped. Your function does not need to be tailrecursive. (10 Points) (b) Write a polymorphic ML function foldr2: ( a * b * c > c) > c > a list * b list > c that is similar to the ML function foldr but folds two lists together. For example, the following function uses foldr2 to compute the sum of products of two lists of integers: fun sumofproducts (xs, ys) = foldr2 (fn (x, y, s) => x * y + s) 0 (xs, ys) In particular, sumofproducts ([1,2,3],[4,5,6]) should expand to 1 * 4 + (2 * 5 + (3 * 6 + 0)) and sumofproducts ([1,2,3],[4,5]) should expand to 1 * 4 + (2 * 5 + 0) Similar to the function zip, the function foldr2 should discard the remaining elements of the longer list, if the two input lists are not of the same length. (10 Points) (c) Express the function zip using the function foldr2. (5 Points) 2
3 Solution to Assignment 1: (a) fun zip ([], _) = [] zip (_, []) = [] zip (x::xs, y::ys) = (x,y)::zip (xs,ys) fun foldr2 f acc ([], _) = acc foldr2 f acc (_, []) = acc foldr2 f acc (x::xs, y::ys) = f (x, y, foldr2 f acc (xs, ys)) (b) (c) fun zip (xs, ys) = foldr2 (fn (x,y,xys) => (x,y)::xys) [] (xs, ys) 3
4 Assignment 2 Type Checking and Type Inference (10 Points) Consider the following ML function declaration fun blurgh (x, y) = if x  y then x * y else x / y handle Div => "Error: Division by 0" This declaration is syntactically correct. However, it contains two type errors. Find and explain these errors. 4
5 Solution to Assignment 2: First error. The term xy has either type int or type real, depending on how the interpreter resolves the overloaded arithmetic operations. Either way, the term following after the if in the conditional expression must be of type bool. Second error. The handler for the Div exception returns a value of type string. However, the if expression that is guarded by the handler returns a value of type int or real (again depending on how overloaded operators are resolved). Either way, the types are incompatible. In ML, an exception handler must always return a value of a type that is compatible with the type of the expression that it guards. 5
6 Assignment 3 Type Inhabitation (13 Points) Write polymorphic ML functions that satisfy the following type signatures: where ˆ a function f: a > b > a ˆ a function g: ( a > b > c) > b > a > c ˆ a function h: ( a, b) sum * ( a > c) * ( b > c) > c ˆ a function i: ( a, b * c) sum > ( b, a) sum * ( c, a) sum datatype ( a, b) sum = L of a R of b Do not use recursion or explicit type annotations in your declarations. Remember that in ML type expressions, the type constructor * has higher precedence than the type constructor >. ( Points) 6
7 Solution to Assignment 3: fun f a b = a fun g x b a = x a b fun h (L a, x, y) = x a h (R b, x, y) = y b fun i (L a) = (R a, R a) i (R (b, c)) = (L b, L c) 7
8 Assignment 4 Scala Traits and Dynamic Binding (18 Points) Consider the following Scala classes and traits: abstract class Term { def eval: Int trait Double extends Term { abstract override def eval = 2 * super.eval trait Increment extends Term { abstract override def eval = 1 + super.eval trait Nullify extends Term { abstract override def eval = 0 class Sum(x: Int, y: Int) extends Term { override def eval = x + y To which value does each of the following expressions evaluate (4 * 3 Points): (a) (new Sum(1,2)).eval (b) (new Sum(1,2) with Double with Increment).eval (c) (new Sum(1,2) with Increment with Double).eval (d) (new Sum(1,2) with Nullify with Increment).eval Explain your results. (6 Points) 8
9 Solution to Assignment 4: (a) 3. Here eval is bound to the eval method declared in the class Sum. (b) 7. Here eval is bound to the eval method declared in the trait Increment. This method calls the eval method of the class it is mixed in, which is the eval method of Double. This method, in turn, calls the eval method of Sum. The latter returns 3 which is rst multiplied by 2 and then incremented by 1. (c) 8. Here eval is bound to the eval method declared in the trait Double. This method calls the eval method of the class it is mixed in, which is the eval method of Increment. This method, in turn, calls the eval method of Sum. The latter returns 3 which is rst incremented by 1 and then multiplied by 2. (d) 1. Here eval is bound to the eval method declared in the trait Increment. This method calls the eval method of the class it is mixed in, which is the eval method of Nullify. The latter returns 0 immediately, which is then incremented by 1. 9
10 Assignment 5 Scala Generics (12 Points) Scala provides two traits Function1 and Function2 for objects representing unary and binary functions. They are dened as follows: trait Function1[T1,+R] { abstract def apply(x: T1): R //... some other methods defined using apply trait Function2[T1,T2,+R] { abstract def apply(x: T1, y: T2): R //... some other methods defined using apply For example, we can dene an object Sum that extends Function2 as follows object Sum extends Function2[Int,Int,Int] { def apply(x: Int, y: Int) = x + y and then use it like this scala> Sum(3,4) res0: Int = 7 Write a trait CurriedFunction2 that is both a Function2 and a Function1 where the unary apply method of Function1 is the curried version of the binary apply method of Function2. For example, if we dene: object Sum extends CurriedFunction2[Int,Int,Int] { def apply(x: Int, y: Int) = x + y then we should be able to use the apply method of Sum also in its curried form: scala> Sum(3)(4) res1: Int = 7 Make sure that you provide the correct type parameters when you extend or mix in the traits Function2 and Function1. Also the variance annotations for the type parameters of CurriedFunction2 should be as general as possible. 10
11 Solution to Assignment 5: trait CurriedFunction2[T1, T2, +R] extends Function1[T1,Function1[T2,R]] with Function2[T1,T2,R] { def apply(x: T1) = (y: T2) => apply(x,y) The following solution also works: trait CurriedFunction2[T1, T2, +R] extends Function2[T1,T2,R] with Function1[T1,Function1[T2,R]] { def apply(x: T1) = (y: T2) => apply(x,y) 11
12 Assignment 6 Subtyping and Variances (12 Points) Consider the following two generic Scala classes: class CoVar[+T](x: T) { def method1: T = x def method2(y: T) : List[T] = List(x,y) class ContraVar[T](x: T) { def method1: T = x def method2(y: T) : List[T] = List(x,y) The Scala compiler will reject both classes because at least one method in each class violates the variance annotation of the type parameter T of that class. (a) For each class, explain what these variance violations are. (6 Points) (b) Change each class such that the violations of variances are xed. You are not allowed to change any of the following: ˆ the variance annotation of the type parameter T; ˆ the type of the parameter x; ˆ the parameter names and bodies of the methods. However, you are allowed to introduce additional type parameters and type bounds, and change the argument and return types of methods. If you change any of the method types, they should remain as precise as possible (e.g., you are not allowed to use the types Any or Nothing). You might nd it more dicult to x the class ContraVar. Hint: introduce an additional type parameter for the whole class. (6 Points) 12
13 Solution to Assignment 6: (a) In the class CoVar the covariant type parameter T appears in contravariant position in the argument type of method method2. On the other hand, in the class ContraVar the contravariant type parameter T appears in covariant position in the result types of methods method1 and method2. (b) class CoVar[+T](x: T) { def method1: T = x def method2[u >: T](y: U) : List[U] = List(x,y) class ContraVar[+U, T <: U](x: T) { def method1: U = x def method2(y: T) : List[U] = List(x,y) 13
14 Assignment 7 Exceptions and call/cc (20 Points) (a) Explain why it is useful to dene exceptions as classes in object oriented languages like C++, Java, and Scala. (4 Points) (b) Languages such as Java and Scala provide tryfinally blocks for exception handling. What do they do and what are they used for? (4 Points) (c) How do exception handlers in functional languages like ML and Scala dier from those of imperative languages like C++ and Java? (4 Points) (d) Consider the following Scheme programs. evaluate to? ( Points) Which value does each of these programs (i) (+ 4 (call/cc (lambda (c) 1))) (ii) (+ (+ 1 2) (call/cc (lambda (c) (+ (+ 1 2) (c 5))))) (iii) (define (search return wanted? lst) (if (wanted? (car lst)) (return (car lst)) (search return wanted? (cdr lst)))) (define (fluffy lst) (+ 1 (call/cc (lambda (return) (search return (lambda (x) (> x 3)) lst))))) (fluffy ( )) You do not need to explain your results to get full credit. Though, you might want to explain how you obtained the result for a chance of receiving partial credit in case your answer is incorrect. 14
15 Solution to Assignment 7: (a) This allows to group exceptions based on their subtype relationship. For example, one can dene a common exception handler for all exceptions that are subclasses of a specic class. (b) The finally block is executed when control leaves the try block, no matter whether this is due to normal termination of the block or because an exception was thrown but not caught in the try block. This is useful, for example, to ensure that all resources (such as locks, le descriptors, network sockets etc.) that have been acquired for usage in the current control block are properly released before control exits this block (e.g., because a thrown exception was not caught). (c) Unlike in imperative languages, where exception handlers are statements, in functional languages exception handlers return values just like any other expression. The result value of the exception handler is also the result value of the expression that is guarded by the handler in the case that an exception is thrown and caught by the handler. In statically typed languages such as ML and Scala, the type of the exception handler therefore has to be compatible with the type of the expression that it guards. (d) (i) 5 (ii) 8 (iii) 5. The function search calls the passed continuation return with the rst list element that satises the given predicate. This is the element 4. The continuation then increments this value by 1. 15
Datatype declarations
Datatype declarations datatype suit = HEARTS DIAMONDS CLUBS SPADES datatype a list = nil (* copy me NOT! *) op :: of a * a list datatype a heap = EHEAP HEAP of a * a heap * a heap type suit val HEARTS
More informationCSCIGA Scripting Languages
CSCIGA.3033.003 Scripting Languages 12/02/2013 OCaml 1 Acknowledgement The material on these slides is based on notes provided by Dexter Kozen. 2 About OCaml A functional programming language All computation
More informationn n Try tutorial on front page to get started! n spring13/ n Stack Overflow!
Announcements n Rainbow grades: HW16, Quiz15, Exam1 n Still grading: HW7, Quiz6, Exam2 Intro to Haskell n HW8 due today n HW9, Haskell, out tonight, due Nov. 16 th n Individual assignment n Start early!
More informationCSE341 Autumn 2017, Midterm Examination October 30, 2017
CSE341 Autumn 2017, Midterm Examination October 30, 2017 Please do not turn the page until 2:30. Rules: The exam is closedbook, closednote, etc. except for one side of one 8.5x11in piece of paper. Please
More informationExercises on ML. Programming Languages. Chanseok Oh
Exercises on ML Programming Languages Chanseok Oh chanseok@cs.nyu.edu Dejected by an arcane type error?  foldr; val it = fn : ('a * 'b > 'b) > 'b > 'a list > 'b  foldr (fn x=> fn y => fn z => (max
More informationCSE 341 Section 5. Winter 2018
CSE 341 Section 5 Winter 2018 Midterm Review! Variable Bindings, Shadowing, Let Expressions Boolean, Comparison and Arithmetic Operations Equality Types Types, Datatypes, Type synonyms Tuples, Records
More informationCSE341 Spring 2016, Midterm Examination April 29, 2016
CSE341 Spring 2016, Midterm Examination April 29, 2016 Please do not turn the page until 10:30. Rules: The exam is closedbook, closednote, etc. except for one side of one 8.5x11in piece of paper. Please
More informationList Functions, and HigherOrder Functions
List Functions, and HigherOrder Functions Björn Lisper Dept. of Computer Science and Engineering Mälardalen University bjorn.lisper@mdh.se http://www.idt.mdh.se/ blr/ List Functions, and HigherOrder
More informationCSC324 TUTORIAL 5. Shems Saleh* *Some slides inspired by/based on Afsaneh Fazly s slides
CSC324 TUTORIAL 5 ML Shems Saleh* *Some slides inspired by/based on Afsaneh Fazly s slides Assignment 1 2 More questions were added Questions regarding the assignment? Starting ML Who am I? Shems Saleh
More informationG Programming Languages  Fall 2012
G22.2110003 Programming Languages  Fall 2012 Week 13  Part 1 Thomas Wies New York University Review Last lecture Object Oriented Programming Outline Today: Scala Sources: Programming in Scala, Second
More informationCSE341: Programming Languages Lecture 9 FunctionClosure Idioms. Dan Grossman Fall 2011
CSE341: Programming Languages Lecture 9 FunctionClosure Idioms Dan Grossman Fall 2011 More idioms We know the rule for lexical scope and function closures Now what is it good for A partial but wideranging
More informationProgramming Paradigms, Fall 06
Programming Paradigms, Fall 06 Multiple Choice Exam January 29, 2007, 10:00 11:15 ID Name Each of the following questions has exactly one correct answer. For each question, you may select one or more answers
More informationCSE 341, Spring 2011, Final Examination 9 June Please do not turn the page until everyone is ready.
CSE 341, Spring 2011, Final Examination 9 June 2011 Please do not turn the page until everyone is ready. Rules: The exam is closedbook, closednote, except for one side of one 8.5x11in piece of paper.
More informationCSE341 Spring 2016, Midterm Examination April 29, 2016
CSE341 Spring 2016, Midterm Examination April 29, 2016 Please do not turn the page until 10:30. Rules: The exam is closedbook, closednote, etc. except for one side of one 8.5x11in piece of paper. Please
More informationCompSci 220. Programming Methodology 12: Functional Data Structures
CompSci 220 Programming Methodology 12: Functional Data Structures A Polymorphic Higher Order Function def findfirst[a](as: Array[A], p: A => Boolean): Int = { def loop(n: Int): Int = if (n >= as.length)
More informationCOP4020 Programming Languages. Functional Programming Prof. Robert van Engelen
COP4020 Programming Languages Functional Programming Prof. Robert van Engelen Overview What is functional programming? Historical origins of functional programming Functional programming today Concepts
More informationCSE3322 Programming Languages and Implementation
Monash University School of Computer Science & Software Engineering Sample Exam 2004 CSE3322 Programming Languages and Implementation Total Time Allowed: 3 Hours 1. Reading time is of 10 minutes duration.
More informationCS558 Programming Languages
CS558 Programming Languages Winter 2018 Lecture 7b Andrew Tolmach Portland State University 19942018 Dynamic Type Checking Static type checking offers the great advantage of catching errors early And
More informationCSE341, Fall 2011, Midterm Examination October 31, 2011
CSE341, Fall 2011, Midterm Examination October 31, 2011 Please do not turn the page until the bell rings. Rules: The exam is closedbook, closednote, except for one side of one 8.5x11in piece of paper.
More informationHaske k ll An introduction to Functional functional programming using Haskell Purely Lazy Example: QuickSort in Java Example: QuickSort in Haskell
Haskell An introduction to functional programming using Haskell Anders Møller amoeller@cs.au.dk The most popular purely functional, lazy programming language Functional programming language : a program
More informationThe type checker will complain that the two branches have different types, one is string and the other is int
1 Intro to ML 1.1 Basic types Need ; after expression  42 = ; val it = 42 : int  7+1; val it = 8 : int Can reference it  it+2; val it = 10 : int  if it > 100 then "big" else "small"; val it = "small"
More informationCSE 341 : Programming Languages Midterm, Spring 2015
Name: CSE 341 : Programming Languages Midterm, Spring 2015 Please do not turn the page until 12:30. Rules: Closed book, closed note, except for one side of one 8.5x11in piece of paper. Please stop promptly
More informationAn introduction introduction to functional functional programming programming using usin Haskell
An introduction to functional programming using Haskell Anders Møller amoeller@cs.au.dkau Haskell The most popular p purely functional, lazy programming g language Functional programming language : a program
More informationINF 212 ANALYSIS OF PROG. LANGS Type Systems. Instructors: Crista Lopes Copyright Instructors.
INF 212 ANALYSIS OF PROG. LANGS Type Systems Instructors: Crista Lopes Copyright Instructors. What is a Data Type? A type is a collection of computational entities that share some common property Programming
More informationCSE341, Fall 2011, Midterm Examination October 31, 2011
CSE341, Fall 2011, Midterm Examination October 31, 2011 Please do not turn the page until the bell rings. Rules: The exam is closedbook, closednote, except for one side of one 8.5x11in piece of paper.
More informationCS558 Programming Languages
CS558 Programming Languages Fall 2017 Lecture 7b Andrew Tolmach Portland State University 19942017 Type Inference Some statically typed languages, like ML (and to a lesser extent Scala), offer alternative
More informationHaskell Overview II (2A) Young Won Lim 8/9/16
(2A) Copyright (c) 2016 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationCS 340 Spring 2019 Midterm Exam
CS 340 Spring 2019 Midterm Exam Instructions: This exam is closedbook, closednotes. Electronic devices of any kind are not permitted. Write your final answers, tidily, in the boxes provided. Scratch
More informationIntroducing Scalalike function types into JavaTX
Introducing Scalalike function types into JavaTX ManLang 2017 Martin Plümicke Andreas Stadelmeier www.dhbwstuttgart.de/horb Overview 1 Type of lambda expressions in Java8 2 Introducing real function
More informationFunctions and Objects. Week 7: Symbolic Computation
Week 7: Symbolic Computation In the previous weeks, we've seen the essential elements of modern functional programming: Functions (rst class) Types (parametric) Pattern Matching Lists This week, we'll
More informationTyped Scheme: Scheme with Static Types
Typed Scheme: Scheme with Static Types Version 4.1.1 Sam TobinHochstadt October 5, 2008 Typed Scheme is a Schemelike language, with a type system that supports common Scheme programming idioms. Explicit
More informationProgramming Languages Fall 2013
Programming Languages Fall 2013 Lecture 2: types Prof. Liang Huang huang@qc.cs.cuny.edu Recap of Lecture 1 functional programming vs. imperative programming basic Haskell syntax function definition lazy
More informationFunctional Programming Midterm exam Tuesday 3/10/2017
Functional Programming Midterm exam Tuesday 3/10/2017 Name: Student number: Before you begin: Do not forget to write down your name and student number above. If necessary, explain your answers in English.
More informationCSE341 Spring 2017, Midterm Examination April 28, 2017
CSE341 Spring 2017, Midterm Examination April 28, 2017 Please do not turn the page until 12:30. Rules: The exam is closedbook, closednote, etc. except for one side of one 8.5x11in piece of paper. Please
More informationA Third Look At ML. Chapter Nine Modern Programming Languages, 2nd ed. 1
A Third Look At ML Chapter Nine Modern Programming Languages, 2nd ed. 1 Outline More pattern matching Function values and anonymous functions Higherorder functions and currying Predefined higherorder
More informationExercise 1 ( = 24 points)
1 Exercise 1 (4 + 5 + 4 + 6 + 5 = 24 points) The following data structure represents polymorphic binary trees that contain values only in special Value nodes that have a single successor: data Tree a =
More informationF28PL1 Programming Languages. Lecture 14: Standard ML 4
F28PL1 Programming Languages Lecture 14: Standard ML 4 Polymorphic list operations length of list base case: [] ==> 0 recursion case: (h::t) => 1 more than length of t  fun length [] = 0 length (_::t)
More informationMiniML. CS 502 Lecture 2 8/28/08
MiniML CS 502 Lecture 2 8/28/08 ML This course focuses on compilation techniques for functional languages Programs expressed in Standard ML MiniML (the source language) is an expressive core subset of
More informationThe Haskell HOP: Higherorder Programming
The Haskell HOP: Higherorder Programming COS 441 Slides 6 Slide content credits: Ranjit Jhala, UCSD Agenda Haskell so far: Firstorder functions This time: Higherorder functions: Functions as data, arguments
More informationA ConceptsFocused Introduction to Functional Programming Using Standard ML Sample Exam #1 Draft of August 12, 2010
A ConceptsFocused Introduction to Functional Programming Using Standard ML Sample Exam #1 Draft of August 12, 2010 Rules: The exam is closedbook, closednote, except for one side of one 8.5x11in piece
More informationCSci 4223 Principles of Programming Languages
CSci 4223 Principles of Programming Languages Lecture 11 Review Features learned: functions, tuples, lists, let expressions, options, records, datatypes, case expressions, type synonyms, pattern matching,
More informationINF 212/CS 253 Type Systems. Instructors: Harry Xu Crista Lopes
INF 212/CS 253 Type Systems Instructors: Harry Xu Crista Lopes What is a Data Type? A type is a collection of computational entities that share some common property Programming languages are designed to
More informationPart I: Written Problems
CSci 4223 Homework 3 DUE: Friday, March 22, 11:59 pm Instructions. Your task is to answer 2 written problems, and to write 16 SML functions (excluding local helper functions) as well as test cases for
More informationCSE341 Spring 2016, Final Examination June 6, 2016
CSE341 Spring 2016, Final Examination June 6, 2016 Please do not turn the page until 8:30. Rules: The exam is closedbook, closednote, etc. except for both sides of one 8.5x11in piece of paper. Please
More informationA First Look at ML. Chapter Five Modern Programming Languages, 2nd ed. 1
A First Look at ML Chapter Five Modern Programming Languages, 2nd ed. 1 ML Meta Language One of the more popular functional languages (which, admittedly, isn t saying much) Edinburgh, 1974, Robin Milner
More informationComputer Science CSC324 Wednesday February 13, Homework Assignment #3 Due: Thursday February 28, 2013, by 10 p.m.
Computer Science CSC324 Wednesday February 13, 2013 St. George Campus University of Toronto Homework Assignment #3 Due: Thursday February 28, 2013, by 10 p.m. Silent Policy A silent policy takes effect
More informationProgramming Systems in Artificial Intelligence Functional Programming
Click to add Text Programming Systems in Artificial Intelligence Functional Programming Siegfried Nijssen 8/03/16 Discover thediscover world at the Leiden world University at Leiden University Overview
More informationCSE341, Spring 2013, Final Examination June 13, 2013
CSE341, Spring 2013, Final Examination June 13, 2013 Please do not turn the page until 8:30. Rules: The exam is closedbook, closednote, except for both sides of one 8.5x11in piece of paper. Please stop
More informationCSE341: Programming Languages Lecture 11 Type Inference. Dan Grossman Spring 2016
CSE341: Programming Languages Lecture 11 Type Inference Dan Grossman Spring 2016 Typechecking (Static) typechecking can reject a program before it runs to prevent the possibility of some errors A feature
More informationCSE341 Section 3. StandardLibrary Docs, FirstClass Functions, & More
CSE341 Section 3 StandardLibrary Docs, FirstClass Functions, & More Adapted from slides by Daniel Snitkovskiy, Nick Mooney, Nicholas Shahan, Patrick Larson, and Dan Grossman Agenda 1. SML Docs Standard
More informationCSE341: Programming Languages Lecture 9 FunctionClosure Idioms. Dan Grossman Winter 2013
CSE341: Programming Languages Lecture 9 FunctionClosure Idioms Dan Grossman Winter 2013 More idioms We know the rule for lexical scope and function closures Now what is it good for A partial but wideranging
More informationTyped Racket: Racket with Static Types
Typed Racket: Racket with Static Types Version 5.0.2 Sam TobinHochstadt November 6, 2010 Typed Racket is a family of languages, each of which enforce that programs written in the language obey a type
More informationA general introduction to Functional Programming using Haskell
A general introduction to Functional Programming using Haskell Matteo Rossi Dipartimento di Elettronica e Informazione Politecnico di Milano rossi@elet.polimi.it 1 Functional programming in a nutshell
More informationCSE341 Autumn 2017, Final Examination December 12, 2017
CSE341 Autumn 2017, Final Examination December 12, 2017 Please do not turn the page until 2:30. Rules: The exam is closedbook, closednote, etc. except for both sides of one 8.5x11in piece of paper. Please
More informationInductive Data Types
Inductive Data Types LarsHenrik Eriksson Functional Programming 1 Original slides by Tjark Weber LarsHenrik Eriksson (UU) Inductive Data Types 1 / 42 Inductive Data Types Today Today New names for old
More informationExercise 8 Parametric polymorphism November 18, 2016
Concepts of ObjectOriented Programming AS 2016 Exercise 8 Parametric polymorphism November 18, 2016 Task 1 Consider the following Scala classes: class A class B extends A class P1[+T] class P2[T
More informationFunctional Programming  2. Higher Order Functions
Functional Programming  2 Higher Order Functions Map on a list Apply Reductions: foldr, foldl Lexical scoping with let s Functional11, CS5314, Sp16 BGRyder 1 Higher Order Functions Functions as 1st class
More informationA Fourth Look At ML. Chapter Eleven Modern Programming Languages, 2nd ed. 1
A Fourth Look At ML Chapter Eleven Modern Programming Languages, 2nd ed. 1 Type Definitions Predefined, but not primitive in ML: datatype bool = true false; Type constructor for lists: datatype 'element
More informationCSE 307: Principles of Programming Languages
1 / 63 CSE 307: Principles of Programming Languages Syntax R. Sekar Topics 1. Introduction 2. Basics 3. Functions 4. Data Structures 5. Overview 6. OCAML Performance 2 / 63 3 / 63 Section 1 Introduction
More informationThe Typed Racket Guide
The Typed Racket Guide Version 5.3.6 Sam TobinHochstadt and Vincent StAmour August 9, 2013 Typed Racket is a family of languages, each of which enforce
More informationCSE 307: Principles of Programming Languages
CSE 307: Principles of Programming Languages Syntax R. Sekar 1 / 63 Topics 1. Introduction 2. Basics 3. Functions 4. Data Structures 5. Overview 6. OCAML Performance 2 / 63 Section 1 Introduction 3 / 63
More informationProgramming Languages Lecture 15: Recursive Types & Subtyping
CSE 230: Winter 2008 Principles of Programming Languages Lecture 15: Recursive Types & Subtyping Ranjit Jhala UC San Diego News? Formalize firstorder type systems Simple types (integers and booleans)
More informationOverview. Elements of Programming Languages. Advanced constructs. Motivating inner class example
Overview Elements of Programming Languages Lecture 11: Objectoriented functional programming James Cheney University of Edinburgh October 30, 2017 We ve now covered: basics of functional programming (with
More informationCS 61A Interpreters, Tail Calls, Macros, Streams, Iterators. Spring 2019 Guerrilla Section 5: April 20, Interpreters.
CS 61A Spring 2019 Guerrilla Section 5: April 20, 2019 1 Interpreters 1.1 Determine the number of calls to scheme eval and the number of calls to scheme apply for the following expressions. > (+ 1 2) 3
More informationUNIVERSITY OF TORONTO Faculty of Arts and Science. Midterm Sample Solutions CSC324H1 Duration: 50 minutes Instructor(s): David Liu.
UNIVERSITY OF TORONTO Faculty of Arts and Science Midterm Sample s CSC324H1 Duration: 50 minutes Instructor(s): David Liu. No Aids Allowed Name: Student Number: Please read the following guidelines carefully.
More informationWellesley College CS251 Programming Languages Spring, 2000 FINAL EXAM REVIEW PROBLEM SOLUTIONS
Wellesley College CS251 Programming Languages Spring, 2000 FINAL EXAM REVIEW PROBLEM SOLUTIONS This document contains solutions to the problems on the final exam review problems posted earlier except for
More informationCPL 2016, week 10. Clojure functional core. Oleg Batrashev. April 11, Institute of Computer Science, Tartu, Estonia
CPL 2016, week 10 Clojure functional core Oleg Batrashev Institute of Computer Science, Tartu, Estonia April 11, 2016 Overview Today Clojure language core Next weeks Immutable data structures Clojure simple
More informationHaskell Overview II (2A) Young Won Lim 8/23/16
(2A) Copyright (c) 2016 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More information1 of 5 5/11/2006 12:10 AM CS 61A Spring 2006 Midterm 2 solutions 1. Box and pointer. Note: Please draw actual boxes, as in the book and the lectures, not XX and X/ as in these ASCIIart solutions. Also,
More informationML Builtin Functions
ML Builtin Functions Since ML is a functional programming language, many of its builtin functions are concerned with function application to objects and structures. In ML, builtin functions are curried
More informationCS558 Programming Languages
CS558 Programming Languages Winter 2017 Lecture 7b Andrew Tolmach Portland State University 19942017 Values and Types We divide the universe of values according to types A type is a set of values and
More informationVariables and Bindings
Net: Variables Variables and Bindings Q: How to use variables in ML? Q: How to assign to a variable? # let = 2+2;; val : int = 4 let = e;; Bind the value of epression e to the variable Variables and Bindings
More informationUNIVERSITETET I OSLO
Exam in INF3110, November 29, 2017 Page 1 UNIVERSITETET I OSLO Det matematisknaturvitenskapelige fakultet Exam in: INF3110 Programming Languages Day of exam: November 29, 2017 Exam hours: 14:30 18:30
More informationHandout 2 August 25, 2008
CS 502: Compiling and Programming Systems Handout 2 August 25, 2008 Project The project you will implement will be a subset of Standard ML called MiniML. While Mini ML shares strong syntactic and semantic
More informationCSCC24 Functional Programming Typing, Scope, Exceptions ML
CSCC24 Functional Programming Typing, Scope, Exceptions ML Carolyn MacLeod 1 winter 2012 1 Based on slides by Anya Tafliovich, with many thanks to Gerald Penn and Sheila McIlraith. motivation Consider
More informationCSE3322 Programming Languages and Implementation
Monash University School of Computer Science & Software Engineering Sample Exam 2003 CSE3322 Programming Languages and Implementation Total Time Allowed: 3 Hours 1. Reading time is of 10 minutes duration.
More informationLists. Adrian Groza. Department of Computer Science Technical University of ClujNapoca
Lists Adrian Groza Department of Computer Science Technical University of ClujNapoca Recall... Parameter evaluation Callbyvalue Callbyname Callbyneed Functions Infix operators Local declarations,
More informationCOSE212: Programming Languages. Lecture 3 Functional Programming in OCaml
COSE212: Programming Languages Lecture 3 Functional Programming in OCaml Hakjoo Oh 2017 Fall Hakjoo Oh COSE212 2017 Fall, Lecture 3 September 18, 2017 1 / 44 Why learn ML? Learning ML is a good way of
More informationA Brief Introduction to Standard ML
A Brief Introduction to Standard ML Specification and Verification with HigherOrder Logic Arnd PoetzschHeffter (Slides by Jens Brandt) Software Technology Group Fachbereich Informatik Technische Universität
More informationImplementing nml: HindleyMilner Type Inference
Implementing nml: HindleyMilner Type Inference Due Friday, April 10 at 5:59PM. In this assignment you will implement HindleyMilner type inference, which represents the current ``best practice'' for flexible
More informationCSE 413 Midterm, May 6, 2011 Sample Solution Page 1 of 8
Question 1. (12 points) For each of the following, what value is printed? (Assume that each group of statements is executed independently in a newly reset Scheme environment.) (a) (define x 1) (define
More informationF28PL1 Programming Languages. Lecture 11: Standard ML 1
F28PL1 Programming Languages Lecture 11: Standard ML 1 Imperative languages digital computers are concrete realisations of von Neumann machines stored program memory associations between addresses and
More informationCSE341: Programming Languages Lecture 25 Subtyping for OOP; Comparing/Combining Generics and Subtyping. Dan Grossman Winter 2013
CSE341: Programming Languages Lecture 25 Subtyping for OOP; Comparing/Combining Generics and Subtyping Dan Grossman Winter 2013 Now Use what we learned about subtyping for records and functions to understand
More informationHow does ML deal with +?
How does ML deal with +? Moscow ML version 2.00 (June 2000)  op +; > val it = fn : int * int > int  1 + 1; > val it = 2 : int  1.0 + 1.0; > val it = 2.0 : real  false + false;! Overloaded + cannot
More informationCSCE 314 Programming Languages
CSCE 314 Programming Languages Haskell: Higherorder Functions Dr. Hyunyoung Lee 1 Higherorder Functions A function is called higherorder if it takes a function as an argument or returns a function as
More informationHaskell Types, Classes, and Functions, Currying, and Polymorphism
1 CSCE 314: Programming Languages Dr. Flemming Andersen Haskell Types, Classes, and Functions, Currying, and Polymorphism 2 Types A type is a collection of related values. For example, Bool contains the
More informationIntroduction to ML. Based on materials by Vitaly Shmatikov. Generalpurpose, nonclike, nonoo language. Related languages: Haskell, Ocaml, F#,
Introduction to ML Based on materials by Vitaly Shmatikov slide 1 ML Generalpurpose, nonclike, nonoo language Related languages: Haskell, Ocaml, F#, Combination of Lisp and Algollike features (1958)
More informationWatch out for the arrows. Recollecting Haskell, Part V. A start on higher types: Mapping, 1. A start on higher types: Mapping, 2.
Watch out for the arrows Recollecting Haskell, Part V Higher Types CIS 352/Spring 2018 Programming Languages January 30, 2018 1 / 28 2 / 28 A start on higher types: Mapping, 1 Mapping via list comprehension
More informationShell CSCE 314 TAMU. Higher Order Functions
1 CSCE 314: Programming Languages Dr. Dylan Shell Higher Order Functions 2 Higherorder Functions A function is called higherorder if it takes a function as an argument or returns a function as a result.
More informationA Second Look At ML. Chapter Seven Modern Programming Languages, 2nd ed. 1
A Second Look At ML Chapter Seven Modern Programming Languages, 2nd ed. 1 Outline Patterns Local variable definitions A sorting example Chapter Seven Modern Programming Languages, 2nd ed. 2 Two Patterns
More informationOCaml. ML Flow. Complex types: Lists. Complex types: Lists. The PL for the discerning hacker. All elements must have same type.
OCaml The PL for the discerning hacker. ML Flow Expressions (Syntax) Compiletime Static 1. Enter expression 2. ML infers a type Exectime Dynamic Types 3. ML crunches expression down to a value 4. Value
More informationLecture #13: Type Inference and Unification. Typing In the Language ML. Type Inference. Doing Type Inference
Lecture #13: Type Inference and Unification Typing In the Language ML Examples from the language ML: fun map f [] = [] map f (a :: y) = (f a) :: (map f y) fun reduce f init [] = init reduce f init (a ::
More informationPrinciples of Programming Languages
Principles of Programming Languages h"p://www.di.unipi.it/~andrea/dida2ca/plp16/ Prof. Andrea Corradini Department of Computer Science, Pisa Lesson 24! Type inference in ML / Haskell 1 Type Checking vs
More informationChapter 3 Linear Structures: Lists
Plan Chapter 3 Linear Structures: Lists 1. Lists... 3.2 2. Basic operations... 3.4 3. Constructors and pattern matching... 3.5 4. Polymorphism... 3.8 5. Simple operations on lists... 3.11 6. Application:
More informationCSE 130: Programming Languages. Polymorphism. Ranjit Jhala UC San Diego
CSE 130: Programming Languages Polymorphism Ranjit Jhala UC San Diego Q: What is the value of res? let f g = let x = 0 in g 2 let x = 100 let h y = x + y let res = f h (a) 0 (b) 2 (c) 100 (d) 102 (e) 12
More information