Essential Scala. Six Core Concepts for Learning Scala Noel underscore
|
|
- Alfred Freeman
- 6 years ago
- Views:
Transcription
1 Essential Scala Six Core Concepts for Learning Scala Noel underscore
2 Introduction
3 Overview
4
5 1. Expressions, types, & values 2. Objects and classes 3. Algebraic data types 4. Structural recursion 5. Sequencing computation 6. Type classes
6 1. Expressions, types, & values 2. Objects and classes 3. Algebraic data types 4. Structural recursion 5. Sequencing computation 6. Type classes
7 Motivation
8 There are simple patterns in effective use of Scala
9 Improve the teaching of Scala
10 Huge thanks to the PLT team people.html
11
12 Expressions, Types, and Values
13 Goal: model of evaluation
14 1 + 1 Expression
15 Int Type Expression
16 Int Type Expression 2 Value
17 Types exist at compiletime, values at run-time
18 Basic language features, syntax
19 Objects and Classes
20 Goal: familiarity with syntax
21 Objects and classes!
22 Case classes and pattern matching
23 Largely practicing syntax
24 Algebraic Data Types
25 Goal: translate data descriptions into code
26 Model data with logical ors and logical ands
27 A website visitor is: logged in; or anonymous
28 A logged in user has: an ID; and an address
29 Structure of the code follows the structure of the data
30 Two patterns: product types (and) sum types (or)
31 Product type: A has a B and C
32 final case class A(b: B, c: C) A has a B and C
33 final case class A(b: B, c: C) A has a B and C
34 final case class A(b: B, c: C) A has a B and C
35 final case class A(b: B, c: C) A has a B and C
36 Sum type: A is a B or C
37 sealed trait A final case class B() extends A final case class C() extends A A is a B or C
38 sealed trait A final case class B() extends A final case class C() extends A A is a B or C
39 sealed trait A final case class B() extends A final case class C() extends A A is a B or C
40 sealed trait A final case class B() extends A final case class C() extends A A is a B or C
41 Sum and product together make algebraic data types
42 Examples
43 A website visitor is: logged in; or anonymous
44 sealed trait Visitor final case class Anonymous() extends Visitor final case class User() extends Visitor
45 A logged in user has: an ID; and an address An anonymous has: an ID
46 sealed trait Visitor { id: Id } final case class Anonymous(id: Id) extends Visitor final case class User(id: Id, ) extends Visitor
47 A calculation is a success or failure
48 sealed trait Calculation final case class Success() extends Calculation final case class Failure() extends Calculation
49 A success has an value. A failure has an error message
50 sealed trait Calculation final case class Success(value: Int) extends Calculation final case class Failure(msg: String) extends Calculation
51 Summary Structure data with logical ands and ors These are called algebraic data types Code follows immediately from structure of the data
52 Structural Recursion
53 Goal: transform algebraic data types
54 sealed trait Calculation final case class Success(value: Int) extends Calculation final case class Failure(msg: String) extends Calculation
55 Implement on Calculation def add(value: Int): Calculation =???
56 Structure of the code follows structure of the data
57 Two (sub-)patterns: pattern matching and polymorphism
58 A is a B or C B has a D and E C has a F and G
59 sealed trait A final case class B(d: D, e: E) extends A final case class C(f: F, g: G) extends A
60 Pattern matching
61 sealed trait A { def dosomething: H = { this match { case B(d, e) => dob(d, e) case C(f, g) => doc(f, g) } } } final case class B(d: D, e: E) extends A final case class C(f: F, g: G) extends A
62 Polymorphism
63 sealed trait A { def dosomething: H } final case class B(d: D, e: E) extends A { def dosomething: H = dob(d, e) } final case class C(f: F, g: G) extends A { def dosomething: H = doc(f, g) }
64 Example
65 sealed trait Calculation final case class Success(value: Int) extends Calculation final case class Failure(msg: String) extends Calculation
66 Add an Int to a Calculation
67 sealed trait Calculation { def add(value: Int): Calculation =??? } final case class Success(value: Int) extends Calculation final case class Failure(msg: String) extends Calculation
68 sealed trait Calculation { def add(value: Int): Calculation = this match { case Success(v) =>??? case Failure(msg) =>??? } } final case class Success(value: Int) extends Calculation final case class Failure(msg: String) extends Calculation
69 sealed trait Calculation { def add(value: Int): Calculation = this match { case Success(v) => Success(v + value) case Failure(msg) => Failure(msg) } } final case class Success(value: Int) extends Calculation final case class Failure(msg: String) extends Calculation
70 Summary Processing algebraic data types immediately follows from the structure of the data Can choose between pattern matching and polymorphism Pattern matching (within the base trait) is usually preferred
71 Sequencing Computation
72 Goal: patterns for sequencing computations
73 Functional programming is about transforming values
74 That is all you can do without introducing sideeffects
75 A => B => C
76 This is sequencing computations
77 Three patterns: fold, map, and flatmap
78 Fold A => B
79 Abstraction over structural recursion
80 sealed trait A { def dosomething: H = { this match { case B(d, e) => dob(d, e) case C(f, g) => doc(f, g) } } } final case class B(d: D, e: E) extends A final case class C(f: F, g: G) extends A
81 sealed trait A { def dosomething: H = { this match { case B(d, e) => dob(d, e) case C(f, g) => doc(f, g) } } } final case class B(d: D, e: E) extends A final case class C(f: F, g: G) extends A
82 sealed trait A { def fold(dob: (D, E) => H, doc: (F, G) => H): H = { this match { case B(d, e) => dob(d, e) case C(f, g) => doc(f, g) } } } final case class B(d: D, e: E) extends A final case class C(f: F, g: G) extends A
83 Example
84 A Result is a Success or Failure
85 sealed trait Result final case class Success() extends Result final case class Failure() extends Result
86 Success contains a value of type A
87 sealed trait Result[A] final case class Success[A](value: A) extends Result[A] final case class Failure[A]() extends Result[A]
88 (This just an invariant Option)
89 Implement fold
90 Start with structural recursion pattern
91 sealed trait Result[A] { def fold[b]: B = this match { Success(v) =>??? Failure() =>??? } } final case class Success[A](value: A) extends Result[A] final case class Failure[A]() extends Result[A]
92 Abstract out arguments
93 sealed trait Result[A] { def fold[b](s: A => B, f: B): B = this match { Success(v) => s(v) Failure() => f } } final case class Success[A](value: A) extends Result[A] final case class Failure[A]() extends Result[A]
94 Fold is a generic transform for any algebraic data type
95 Fold is not always the best choice
96 Not all data is an algebraic data type
97 Sometimes other methods are easier to use
98 Result[A]
99 Get user from database (might not be a user)
100 Result[User] Convert user to JSON
101 Result[User] User => Json Result[Json]
102 Map map = F[A] A => B F[B]
103 Get user from database (might not be a user)
104 Result[User] Get order for user (might not be an order)
105 Result[User] User => Result[Order] Result[Order]
106 FlatMap flatmap = F[A] A => F[B] F[B]
107 Example
108 getorder(id: UserId): HttpResponse
109 UserId UserId => Result[User] User => Result[Order] Order => Json Result[Json] => HttpResponse
110 UserId UserId => Result[User] User => Result[Order] Order => Json Result[Json] => HttpResponse
111 UserId UserId => Result[User] User => Result[Order]??? Order => Json Result[Json] => HttpResponse
112 UserId UserId => Result[User] User => Result[Order] flatmap Order => Json Result[Json] => HttpResponse
113 UserId UserId => Result[User] User => Result[Order] Order => Json Result[Json] => HttpResponse
114 UserId??? UserId => Result[User] User => Result[Order] Order => Json Result[Json] => HttpResponse
115 UserId map UserId => Result[User] User => Result[Order] Order => Json Result[Json] => HttpResponse
116 UserId UserId => Result[User] User => Result[Order] Order => Json Result[Json] => HttpResponse
117 UserId??? UserId => Result[User] User => Result[Order] Order => Json Result[Json] => HttpResponse
118 UserId fold UserId => Result[User] User => Result[Order] Order => Json Result[Json] => HttpResponse
119 Summary Standard patterns for sequencing computations F[A] map (A => B) = F[B] F[A] flatmap (A => F[B]) = F[B] fold is general transformation for algebraic data types You can teach monads in an introductory course!
120 Type Classes
121 Ad-hoc polymorphism
122 Break free from your class oppressors!
123 Conclusions
124 Scala is simple
125 3 patterns are 90% of code
126 4 patterns are 99% of code
127 Program design in Scala is systematic
128 Be like keyboard cat!
129 underscore.io/training/ courses/essentialscala/
Types Working For You
Types Working For You Richard Dallaway, @d6y underscore.io Modern type system with lots of power Two Themes Straightforward Scala Types Working for Us Progression Part 1 Straightforward Scala Part 2
More informationCSE341 Section 3. Standard-Library Docs, First-Class Functions, & More
CSE341 Section 3 Standard-Library Docs, First-Class Functions, & More Adapted from slides by Daniel Snitkovskiy, Nick Mooney, Nicholas Shahan, Patrick Larson, and Dan Grossman Agenda 1. SML Docs Standard
More informationUni$ng Church & State OO vs FP
Uni$ng Church & State OO vs FP Noel Welsh @noelwelsh underscore Alonzo Church Invented the Lambda Calculus Alan Kay Invented Smalltalk + OO + FP =? The Church Encoding Claims #1 FP and OO make different
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 informationNotes from a Short Introductory Lecture on Scala (Based on Programming in Scala, 2nd Ed.)
Notes from a Short Introductory Lecture on Scala (Based on Programming in Scala, 2nd Ed.) David Haraburda January 30, 2013 1 Introduction Scala is a multi-paradigm language that runs on the JVM (is totally
More informationSYNERGY INSTITUTE OF ENGINEERING & TECHNOLOGY,DHENKANAL LECTURE NOTES ON DIGITAL ELECTRONICS CIRCUIT(SUBJECT CODE:PCEC4202)
Lecture No:5 Boolean Expressions and Definitions Boolean Algebra Boolean Algebra is used to analyze and simplify the digital (logic) circuits. It uses only the binary numbers i.e. 0 and 1. It is also called
More informationCombinational Logic Circuits
Chapter 3 Combinational Logic Circuits 12 Hours 24 Marks 3.1 Standard representation for logical functions Boolean expressions / logic expressions / logical functions are expressed in terms of logical
More informationPrograms as Values Pure Functional Database Access in Scala
Programs as Values Pure Functional Database Access in Scala Rob Norris Gemini Observatory Programs as Values Pure Functional Database Access in Scala Rob Norris Gemini Observatory What's this about? This
More informationMONIX TASK LAZY, ASYNC & AWESOME. Alexandru Nedelcu. Software / alexn.org
LAZY, ASYNC & AWESOME Alexandru Nedelcu Software Developer @ eloquentix.com @alexelcu / alexn.org WHAT IS MONIX? Scala / Scala.js library For composing asynchronous programs Exposes Observable & Task Typelevel
More informationIntroduction to Functional Programming
A Level Computer Science Introduction to Functional Programming William Marsh School of Electronic Engineering and Computer Science Queen Mary University of London Aims and Claims Flavour of Functional
More informationCS205: Scalable Software Systems
CS205: Scalable Software Systems Lecture 4 September 14, 2016 Lecture 4 CS205: Scalable Software Systems September 14, 2016 1 / 16 Quick Recap Things covered so far Problem solving by recursive decomposition
More informationYou ve encountered other ways of signalling errors. For example, if you lookup an unbound key in a hashtable, Java (and Scala) produce nulls:
Lecture 5 1 Required Reading Read Chapters 16 and 17 of Programming in Scala. 2 Partial Functions and Signalling Errors Many functions are not defined on all inputs. For example, if you re reading input
More informationHigher-Order Functions
Higher-Order Functions Tjark Weber Functional Programming 1 Based on notes by Pierre Flener, Jean-Noël Monette, Sven-Olof Nyström Tjark Weber (UU) Higher-Order Functions 1 / 1 Tail Recursion http://xkcd.com/1270/
More informationBoolean Analysis of Logic Circuits
Course: B.Sc. Applied Physical Science (Computer Science) Year & Sem.: IInd Year, Sem - IIIrd Subject: Computer Science Paper No.: IX Paper Title: Computer System Architecture Lecture No.: 7 Lecture Title:
More informationIT 201 Digital System Design Module II Notes
IT 201 Digital System Design Module II Notes BOOLEAN OPERATIONS AND EXPRESSIONS Variable, complement, and literal are terms used in Boolean algebra. A variable is a symbol used to represent a logical quantity.
More informationOverview. Elements of Programming Languages. Advanced constructs. Motivating inner class example
Overview Elements of Programming Languages Lecture 11: Object-oriented functional programming James Cheney University of Edinburgh October 30, 2017 We ve now covered: basics of functional programming (with
More informationScala - Some essential concepts -
Scala - Some essential concepts - Marcel Lüthi Graphics and Vision Research Group Department of Mathematics and Computer Science University of Basel Programming an important activity Data preprocessing
More informationan overview Alceste Scalas Programming languages reading group
an overview Alceste Scalas Programming languages reading group 31 October 2017 Scala: what s the hype about? Object oriented and functional programming language Runs on the JVM... interoperability with
More informationLife in a Post-Functional World
Life in a Post-Functional World Definitions Functional Programming Definitions Functional Programming Programming with functions! Definitions Functional Programming Programming with functions! Functions
More informationSide-effect checking for Scala. Lukas Rytz, Martin Odersky, Adriaan Moors Scala Days 2011
Side-effect checking for Scala Lukas Rytz, Martin Odersky, Adriaan Moors Scala Days 2011 Why effect checking? We have at least one post a week where the correct answer is wholly or in part, effect system.
More informationThose classes I never wrote. The power of recursion schemes applied to data engineering
Those 10000 classes I never wrote The power of recursion schemes applied to data engineering 1 greetings The name s Valentin (@ValentinKasas) Organizer of the Paris Scala User Group Member of the ScalaIO
More informationBawar Abid Abdalla. Assistant Lecturer Software Engineering Department Koya University
Logic Design First Stage Lecture No.6 Boolean Algebra Bawar Abid Abdalla Assistant Lecturer Software Engineering Department Koya University Outlines Boolean Operations Laws of Boolean Algebra Rules of
More informationLinked lists and the List class
Linked lists and the List class Cheong 1 Linked lists So far, the only container object we used was the array. An array is a single object that contains references to other objects, possibly many of them.
More informationScala in Martin Odersky
Scala in 2016 - Martin Odersky 2015 was on the quiet side Maturing tools: 2.11.x, IDEs, sbt Steady growth indeed.com jobs google trends In 2016, things will move again Scala 2.12 release Rethinking the
More informationScala. Fernando Medeiros Tomás Paim
Scala Fernando Medeiros fernfreire@gmail.com Tomás Paim tomasbmp@gmail.com Topics A Scalable Language Classes and Objects Basic Types Functions and Closures Composition and Inheritance Scala s Hierarchy
More informationCSE 341: Programming Languages. Section AC with Nate Yazdani
CSE 341: Programming Languages Section AC with Nate Yazdani aga method dispatch mixins visitor pattern method dispatch what is dispatch method dispatch or just dispatch is the protocol to look up the method
More informationIntroduction to OCaml
Fall 2018 Introduction to OCaml Yu Zhang Course web site: http://staff.ustc.edu.cn/~yuzhang/tpl References Learn X in Y Minutes Ocaml Real World OCaml Cornell CS 3110 Spring 2018 Data Structures and Functional
More informationList Functions, and Higher-Order Functions
List Functions, and Higher-Order 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 Higher-Order
More informationLists. Prof. Clarkson Fall Today s music: "Blank Space" by Taylor Swift
Lists Prof. Clarkson Fall 2017 Today s music: "Blank Space" by Taylor Swift I could show you incredible things // Magic, madness, heaven, sin So it's gonna be forever // Or it's gonna go down in flames
More informationThe fringe of a binary tree are the values in left-to-right order. For example, the fringe of the following tree:
Lecture 13 The Same Fringe Problem Given a binary tree: sealed trait BinTree [+A] case class Node [A]( lhs : BinTree [A], rhs : BinTree [A]) extends BinTree [A] case class Leaf [A]( x: A) extends BinTree
More informationPoints Addressed in this Lecture. Standard form of Boolean Expressions. Lecture 4: Logic Simplication & Karnaugh Map
Points Addressed in this Lecture Lecture 4: Logic Simplication & Karnaugh Map Professor Peter Cheung Department of EEE, Imperial College London Standard form of Boolean Expressions Sum-of-Products (SOP),
More informationCoq Summer School, Session 2 : Basic programming with numbers and lists. Pierre Letouzey
Coq Summer School, Session 2 : Basic programming with numbers and lists Pierre Letouzey Predened data structures Predened types are actually declared to Coq at load time 1 : Inductive bool := true false.
More informationCopyright 2018 Tendril, Inc. All rights reserved.
Type Parameter Power-Up! Variance, Bounds, and Inference INTRO Motivations 3 INTRO Motivations Home Energy Report Generation System Free Monad Workflow stages extending common base class Workflow actions
More informationChapter 2 Boolean algebra and Logic Gates
Chapter 2 Boolean algebra and Logic Gates 2. Introduction In working with logic relations in digital form, we need a set of rules for symbolic manipulation which will enable us to simplify complex expressions
More informationLecture 10 September 11, 2017
Programming in Haskell S P Suresh http://www.cmi.ac.in/~spsuresh Lecture 10 September 11, 2017 Combining elements sumlist :: [Int] -> Int sumlist [] = 0 sumlist (x:xs) = x + (sumlist xs) multlist :: [Int]
More informationShapeless 101. Shapeless is an advanced functional programming library for the scala language.
Shapeless 101 Shapeless is an advanced functional programming library for the scala language. Disclaimer This talk is adressed to complete beginners in Shapeless. Shapeless 101 Me : Harry Laoulakos (Software
More informationPurely Functional I/O in Scala
Purely Functional I/O in Scala Rúnar Óli Bjarnason @runarorama Scala.IO, Paris 2013 What you should take away from this talk You do not need side-effects to do I/O. Purely functional I/O really is pure.
More informationAdvanced Type System Features Tom Schrijvers. Leuven Haskell User Group
Advanced Type System Features Tom Schrijvers Leuven Haskell User Group Data Recursion Genericity Schemes Expression Problem Monads GADTs DSLs Type Type Families Classes Lists and Effect Free Other Handlers
More informationLecture 8: Summary of Haskell course + Type Level Programming
Lecture 8: Summary of Haskell course + Type Level Programming Søren Haagerup Department of Mathematics and Computer Science University of Southern Denmark, Odense October 31, 2017 Principles from Haskell
More information02157 Functional Programming. Michael R. Ha. Disjoint Unions and Higher-order list functions. Michael R. Hansen
Disjoint Unions and Higher-order list functions nsen 1 DTU Compute, Technical University of Denmark Disjoint Unions and Higher-order list functions MRH 27/09/2018 Overview Recap Disjoint union (or Tagged
More informationCS558 Programming Languages
CS558 Programming Languages Fall 2017 Lecture 7b Andrew Tolmach Portland State University 1994-2017 Type Inference Some statically typed languages, like ML (and to a lesser extent Scala), offer alternative
More informationThe Eiffel language. Slides partly based on :
The Eiffel language Slides partly based on : http://se.inf.ethz.ch/courses/2015b_fall/eprog/english_index.html Eiffel, in brief Procedural, object-oriented programming language created by Bertrand Meyer
More informationINTRODUCTION TO HASKELL
INTRODUCTION TO HASKELL PRINCIPLES OF PROGRAMMING LANGUAGES Norbert Zeh Winter 2018 Dalhousie University 1/81 HASKELL: A PURELY FUNCTIONAL PROGRAMMING LANGUAGE Functions are first-class values: Can be
More informationCompositional I/Ο Streams in Scala. Rúnar Bjarnason, Verizon QCon London, March 2016
Compositional I/Ο Streams in Scala Rúnar Bjarnason, Verizon Labs @runarorama QCon London, March 2016 Scalaz-Stream (FS2) Functional Streams for Scala github.com/functional-streams-for-scala Disclaimer
More informationChapter 2 Combinational Logic Circuits
Logic and Computer Design Fundamentals Chapter 2 Combinational Logic Circuits Part 2 Circuit Optimization Overview Part Gate Circuits and Boolean Equations Binary Logic and Gates Boolean Algebra Standard
More informationChapter 4C Homework Functions III Individual Assignment 30 Points Questions 6 Points Script 24 Points
PCS1-Ch-4C-Functions-3-HW.docx CSCI 1320 Initials P a g e 1 If this lab is an Individual assignment, you must do all coded programs on your own. You may ask others for help on the language syntax, but
More informationBibliography. Analyse et Conception Formelle. Lesson 5. Crash Course on Scala. Scala in a nutshell. Outline
Bibliography Analyse et Conception Formelle Lesson 5 Crash Course on Scala Simply Scala. Onlinetutorial: http://www.simply.com/fr http://www.simply.com/ Programming in Scala, M. Odersky, L. Spoon, B. Venners.
More informationG Programming Languages - Fall 2012
G22.2110-003 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 informationSide Effects (3A) Young Won Lim 1/13/18
Side Effects (3A) Copyright (c) 2016-2018 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
More informationFunctional Programming
Functional Programming Björn B. Brandenburg The University of North Carolina at Chapel Hill Based in part on slides and notes by S. Olivier, A. Block, N. Fisher, F. Hernandez-Campos, and D. Stotts. Brief
More informationCSCE 314 Programming Languages
CSCE 314 Programming Languages Haskell: Higher-order Functions Dr. Hyunyoung Lee 1 Higher-order Functions A function is called higher-order if it takes a function as an argument or returns a function as
More informationShell CSCE 314 TAMU. Higher Order Functions
1 CSCE 314: Programming Languages Dr. Dylan Shell Higher Order Functions 2 Higher-order Functions A function is called higher-order if it takes a function as an argument or returns a function as a result.
More informationSome Scala problems for self
Some Scala problems for self study@cs.lth.se May 4, 2012 2 Chapter 1 Getting Started 1.1 Background The book, Programming in Scala, Second Edition (PINS), is very good, and the best way to learn Scala
More informationData types à la carte. Wouter Swierstra Dutch HUG 25/8/10
Data types à la carte Wouter Swierstra Dutch HUG 25/8/10 Expressions data Expr where Add :: Expr -> Expr -> Expr Val :: Int -> Expr eval :: Expr -> Int eval (Val x) = x eval (Add l r) = eval l + eval r
More informationScala : an LLVM-targeted Scala compiler
Scala : an LLVM-targeted Scala compiler Da Liu, UNI: dl2997 Contents 1 Background 1 2 Introduction 1 3 Project Design 1 4 Language Prototype Features 2 4.1 Language Features........................................
More informationCompSci 220. Programming Methodology 16: Understanding FP Error Handling Part 2
CompSci 220 Programming Methodology 16: Understanding FP Error Handling Part 2 Objectives Option Composition and Lifting For- Comprehension Expansion The Either Data Type Option and Either in the Standard
More informationTypes for Flexible Objects
Types for Flexible Objects Building a Typed Scripting Language Pottayil Harisanker Menon, Zachary Palmer, Alexander Rozenshteyn, Scott F. Smith The Johns Hopkins University November 17th, 2014 2/1 Objective
More informationLecture: Functional Programming
Lecture: Functional Programming This course is an introduction to the mathematical foundations of programming languages and the implementation of programming languages and language-based tools. We use
More informationLisp: Question 1. Dr. Zoran Duric () Midterm Review 1 1/ 13 September 23, / 13
Lisp: Question 1 Write a recursive lisp function that takes a list as an argument and returns the number of atoms on any level of the list. For instance, list (A B (C D E) ()) contains six atoms (A, B,
More informationComp 311 Functional Programming. Eric Allen, Two Sigma Investments Robert Corky Cartwright, Rice University Sagnak Tasirlar, Two Sigma Investments
Comp 311 Functional Programming Eric Allen, Two Sigma Investments Robert Corky Cartwright, Rice University Sagnak Tasirlar, Two Sigma Investments How to Decide Between Structural and Generative Recursion
More informationOverview. Elements of Programming Languages. Evaluation order. Evaluation order
Overview Elements of Programming Languages Lecture 15: Evaluation strategies and laziness James Cheney University of Edinburgh November 18, 216 Final few lectures: cross-cutting language design issues
More informationAn Overview of Scala. Philipp Haller, EPFL. (Lots of things taken from Martin Odersky's Scala talks)
An Overview of Scala Philipp Haller, EPFL (Lots of things taken from Martin Odersky's Scala talks) The Scala Programming Language Unifies functional and object-oriented programming concepts Enables embedding
More informationCSCI-GA Scripting Languages
CSCI-GA.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 informationIntroduction. The Quine-McCluskey Method Handout 5 January 24, CSEE E6861y Prof. Steven Nowick
CSEE E6861y Prof. Steven Nowick The Quine-McCluskey Method Handout 5 January 24, 2013 Introduction The Quine-McCluskey method is an exact algorithm which finds a minimum-cost sum-of-products implementation
More informationPROGRAMMING IN HASKELL. Chapter 2 - First Steps
PROGRAMMING IN HASKELL Chapter 2 - First Steps 0 The Hugs System Hugs is an implementation of Haskell 98, and is the most widely used Haskell system; The interactive nature of Hugs makes it well suited
More informationCS457/557 Functional Languages
CS457/557 Functional Languages Spring 2018 Lecture 1: Course Introduction Andrew Tolmach Portland State University (with thanks to Mark P. Jones) 1 Goals of this course Introduce the beautiful ideas of
More informationUsing Scala in CS241
Using Scala in CS241 Winter 2018 Contents 1 Purpose 1 2 Scala 1 3 Basic Syntax 2 4 Tuples, Arrays, Lists and Vectors in Scala 3 5 Binary output in Scala 5 6 Maps 5 7 Option types 5 8 Objects and Classes
More informationCS558 Programming Languages
CS558 Programming Languages Winter 2018 Lecture 7b Andrew Tolmach Portland State University 1994-2018 Dynamic Type Checking Static type checking offers the great advantage of catching errors early And
More informationand other Functional Patterns
Continuations and other Functional Patterns Christopher League Long Island University Northeast Scala Symposium 18 February 2011 Sin & redemption Java classes SML runtime Standard ML of New Jersey v110.30
More informationCSE341: Programming Languages Lecture 26 Course Victory Lap. Dan Grossman Spring 2016
CSE341: Programming Languages Lecture 26 Course Victory Lap Dan Grossman Spring 2016 Final Exam As also indicated in class-list email: Next Monday, 8:30-10:20 Intention is to focus primarily on material
More informationSlide Set 15 (Complete)
Slide Set 15 (Complete) for ENCM 339 Fall 2017 Section 01 Steve Norman, PhD, PEng Electrical & Computer Engineering Schulich School of Engineering University of Calgary November 2017 ENCM 339 Fall 2017
More informationAn Algebra of Dependent Data Types
An Algebra of Dependent Data Types TYPES 2006 Tyng-Ruey Chuang Joint work with Jan-Li Lin Institute of Information Science, Academia Sinica Nangang, Taipei 115, Taiwan trc@iis.sinica.edu.tw 1 List in Coq
More informationCS 360: Programming Languages Lecture 12: More Haskell
CS 360: Programming Languages Lecture 12: More Haskell Geoffrey Mainland Drexel University Adapted from Brent Yorgey s course Introduction to Haskell. Section 1 Administrivia Administrivia Homework 5 due
More informationTypes, lists & functions
Week 2 Types, lists & functions Data types If you want to write a program that allows the user to input something, you can use the command input: name = input (" What is your name? ") print (" Hello "+
More informationLecture 23: Priority Queues 10:00 AM, Mar 19, 2018
CS18 Integrated Introduction to Computer Science Fisler, Nelson Lecture 23: Priority Queues 10:00 AM, Mar 19, 2018 Contents 1 Priority Queues 1 2 Binary Heaps 2 3 Heaps 4 4 Aside: The Ordered Trait 5 5
More information// Body of shortestlists starts here y flatmap { case Nil => Nil case x :: xs => findshortest(list(x), xs)
8 Shortest-strings Problem: Partial-Solution Dump Drew McDermott drew.mcdermott@yale.edu Lecture notes for 2016-09-19, revised 20016-09-25 Here is the state of play in solving the little puzzle about finding
More informationIntroduction to Type Driven Development in Scala
Introduction to Type Driven Development in Scala Marcus A. Henry, Jr. @dreadedsoftware Software Engineer @integrichain 1 def f(a: Int, b: Int): String = { a.tostring + b.tostring This is a function 2 def
More informationModule 04: Lists. Topics: Lists and their methods Mutating lists Abstract list functions Readings: ThinkP 8, 10. CS116 Fall : Lists
Module 04: Lists Topics: Lists and their methods Mutating lists Abstract list functions Readings: ThinkP 8, 10 1 Consider the string method split >>> name = "Harry James Potter" >>> name.split() ['Harry',
More informationCS153: Compilers Lecture 15: Local Optimization
CS153: Compilers Lecture 15: Local Optimization Stephen Chong https://www.seas.harvard.edu/courses/cs153 Announcements Project 4 out Due Thursday Oct 25 (2 days) Project 5 out Due Tuesday Nov 13 (21 days)
More informationValues (a.k.a. data) representation. Advanced Compiler Construction Michel Schinz
Values (a.k.a. data) representation Advanced Compiler Construction Michel Schinz 2016 03 10 The problem Values representation A compiler must have a way of representing the values of the source language
More informationValues (a.k.a. data) representation. The problem. Values representation. The problem. Advanced Compiler Construction Michel Schinz
Values (a.k.a. data) representation The problem Advanced Compiler Construction Michel Schinz 2016 03 10 1 2 Values representation The problem A compiler must have a way of representing the values of the
More informationAlgorithms for Bioinformatics
These slides are based on previous years slides of Alexandru Tomescu, Leena Salmela and Veli Mäkinen 582670 Algorithms for Bioinformatics Lecture 1: Primer to algorithms and molecular biology 2.9.2014
More informationIntroduction to Computer Architecture
Boolean Operators The Boolean operators AND and OR are binary infix operators (that is, they take two arguments, and the operator appears between them.) A AND B D OR E We will form Boolean Functions of
More informationGraphical Untyped Lambda Calculus Interactive Interpreter
Graphical Untyped Lambda Calculus Interactive Interpreter (GULCII) Claude Heiland-Allen https://mathr.co.uk mailto:claude@mathr.co.uk Edinburgh, 2017 Outline Lambda calculus encodings How to perform lambda
More information4 KARNAUGH MAP MINIMIZATION
4 KARNAUGH MAP MINIMIZATION A Karnaugh map provides a systematic method for simplifying Boolean expressions and, if properly used, will produce the simplest SOP or POS expression possible, known as the
More informationCMSC 330: Organization of Programming Languages. Functional Programming with Lists
CMSC 330: Organization of Programming Languages Functional Programming with Lists CMSC330 Spring 2018 1 Lists in OCaml The basic data structure in OCaml Lists can be of arbitrary length Implemented as
More informationJVM ByteCode Interpreter
JVM ByteCode Interpreter written in Haskell (In under 1000 Lines of Code) By Louis Jenkins Presentation Schedule ( 15 Minutes) Discuss and Run the Virtual Machine first
More informationCSCI-GA Final Exam
CSCI-GA 2110-003 - 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
More informationType Classes in Haskell Tom Schrijvers. Leuven Haskell User Group
Type Classes in Haskell Tom Schrijvers Leuven Haskell User Group Haskell Research Team Partners Monads Type Classes GHC Folds Pattern Matching Equational Reasoning DSLs Advanced Types Adhoc Overloading
More information9. Simple contact forms
9. Simple contact forms Learn how to create a simple contact form for your TYPO3 website, as shown in the example on the right. With this form you are able to add/edit the fields, set a receiving e-mail
More informationAn introduction to functional programming. July 23, 2010
An introduction to functional programming July 23, 2010 About Outline About About What is functional programming? What is? Why functional programming? Why? is novel. is powerful. is fun. About A brief
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 informationA SHORT COURSE ON C++
Introduction to A SHORT COURSE ON School of Mathematics Semester 1 2008 Introduction to OUTLINE 1 INTRODUCTION TO 2 FLOW CONTROL AND FUNCTIONS If Else Looping Functions Cmath Library Prototyping Introduction
More informationDigital Techniques. Lecture 1. 1 st Class
Digital Techniques Lecture 1 1 st Class Digital Techniques Digital Computer and Digital System: Digital computer is a part of digital system, it based on binary system. A block diagram of digital computer
More informationVerifying pattern matching with guards in Scala
EPFL SAV 07 June 21, 2007 version 1.1 Outline Introduction Scala reasoning about pattern matching status in Scala motivation project overview general idea formalization of concepts axioms patterns miscellaneous
More informationCSCE 314 TAMU Fall CSCE 314: Programming Languages Dr. Flemming Andersen. Haskell Functions
1 CSCE 314: Programming Languages Dr. Flemming Andersen Haskell Functions 2 Outline Defining Functions List Comprehensions Recursion 3 Conditional Expressions As in most programming languages, functions
More informationCHAPTER-2 STRUCTURE OF BOOLEAN FUNCTION USING GATES, K-Map and Quine-McCluskey
CHAPTER-2 STRUCTURE OF BOOLEAN FUNCTION USING GATES, K-Map and Quine-McCluskey 2. Introduction Logic gates are connected together to produce a specified output for certain specified combinations of input
More informationSTUDENT LESSON A7 Simple I/O
STUDENT LESSON A7 Simple I/O Java Curriculum for AP Computer Science, Student Lesson A7 1 STUDENT LESSON A7 Simple I/O INTRODUCTION: The input and output of a program s data is usually referred to as I/O.
More informationLECTURE 17. Expressions and Assignment
LECTURE 17 Expressions and Assignment EXPRESSION SYNTAX An expression consists of An atomic object, e.g. number or variable. An operator (or function) applied to a collection of operands (or arguments)
More informationC: How to Program. Week /Mar/05
1 C: How to Program Week 2 2007/Mar/05 Chapter 2 - Introduction to C Programming 2 Outline 2.1 Introduction 2.2 A Simple C Program: Printing a Line of Text 2.3 Another Simple C Program: Adding Two Integers
More information