# CS 360: Programming Languages Lecture 10: Introduction to Haskell

Size: px
Start display at page:

Download "CS 360: Programming Languages Lecture 10: Introduction to Haskell"

## Transcription

1 CS 360: Programming Languages Lecture 10: Introduction to Haskell Geoffrey Mainland Drexel University Thursday, February 5, 2015 Adapted from Brent Yorgey s course Introduction to Haskell.

2 Section 1 Administrivia

3 Administrivia Homework 4 due Monday night. Midterm in class Tuesday. Homework 5 (Haskell) will be posted before the weekend. It will be due February 16. The course home page has instructions for getting GHC, the Haskell implementation we will be using, up and running on tux. I highly recommend reading Learn you a Haskell for Great Good! We will be covering many concepts very quickly in the next two lectures, and it will be extremely difficult for you to understand all the material if you don t complete the accompanying readings.

4 Section 2 Homework 3 Solutions

5 Section 3 Introduction to Haskell

6 Haskell Haskell is: Functional: function are first-class, and the meaning of a Haskell program is determined by evaluating functions rather than executing instructions. Pure: calling a function with the same arguments results in the same result every time. Lazy: expressions are not evaluated until their values are actually needed. Statically typed: every Haskell expression has a type, and types are checked at compile time.

7 Types Types are invariants: they state something that is true for all executions of a program. Types are statically checked. If a function uses, for example, a string as an integer, the error will be reported at compile time, not at run time. Up side: compiler catches errors for you. Down side: can t sneak errors past the compiler, error messages can be hard to decipher. Types serve as a form of documentation. Given just a type, you know a lot about how a function can be used and what it might do. Types help clarify your thinking about a program and its structure.

8 Abstraction in Haskell Each significant piece of functionality in a program should be implemented in just one place in the source code. Where similar functions are carried out by distinct pieces of code, it is generally beneficial to combine them into one by abstracting out the varying parts. Benjamin Pierce [Pie02] Functional languages, and in particular Haskell, are very good at abstraction. We have already seen higher-order functions, like map, filter, and fold, that capture reusable patterns we have repeatedly programmed by hand many times (what pattern is this?). Haskell s type classes add another powerful form of abstraction.

9 Wholemeal Programming Functional languages excel at wholemeal programming, a term coined by Geraint Jones. Wholemeal programming means to think big: work with an entire list, rather than a sequence of elements; develop a solution space, rather than an individual solution; imagine a graph, rather than a single path. The wholemeal approach often offers new insights or provides new perspectives on a given problem. It is nicely complemented by the idea of projective programming: first solve a more general problem, then extract the interesting bits and pieces by transforming the general program into more specialised ones. Ralph Hinze [Hin09] Consider The following C function: int sum_of_squares(int* arr, int len) { int acc = 0; for (int i = 0; i < len; i++ ) acc = acc + arr[i] * arr[i]; return acc; } This function has to worry about the low-level details of maintaining an index into the array. It also mixes up the details of what is really two separate operations: squaring numbers and summing them. We can write this function in Haskell as: sumofsquares xs = sum (map (^ 2) xs)

10 Learning Haskell Haskell is a challenging language to learn because it requires you to think differently about programming. Fortunately you now know Scheme, which gives you a head start Please do the readings from Learn You a Haskell. They will help!

11 Declarations and variables x :: Int x = 1 This fragment defines a variable x with the value 1. It also provides a type signature for x. The symbol :: is pronounced has type. The value of x cannot be changed! There is no set! in Haskell.

12 Using ghci The interpreter we will be using is ghci. It is actually part of the GHC compiler. Please check the course home page for a short guide to using GHC and ghci. Unfortunately the version installed on tux is broken the guide provides instructions for using our (not broken) version of GHC. Like mit-scheme, ghci provides a read-eval-print loop (REPL). Unlike mit-scheme, ghci lets you edit what you enter... Import ghci commands include :load, :reload, and :type.

13 Other types n :: Integer n = pi :: Double pi = singleprecisionpi :: Float singleprecisionpi = b :: Bool b = True c1 :: Char c1 = x s1, :: String s1 = "Hello, world!" Haskell includes types for arbitrary-precision integers, floating-point numbers, Booleans, Unicode characters, and Unicode strings.

14 Boolean logic Boolean values can be combined with && (logical and), (logical or), and not. ex1 = True && False ex2 = not (False True) Values can be compared for equality with == and /=, or compared for order using <, >, <=, and >=. ex3 = ( a == a ) ex4 = (16 /= 3) ex5 = (5 > 3) && ( p <= q ) ex6 = "Haskell" > "Scheme" Haskell also has if expressions, but they are not used often guards and patterns, which we will see shortly, are preferred. ex7 = if "Haskell" > "Scheme" then "Haskell is better!" else "Scheme is better!"

15 Arithmetic ex7 = ex8 = ex9 = 2.35 * 8.6 ex10 = 8.7 / 3.1 ex11 = mod 19 3 ex12 = 19 mod 3 ex13 = 7 ^ 222 ex15 = (-3) * (-7) Backticks make a function name into an infix operator. Negative numbers must often be surrounded by parentheses to avoid having the negation sign parsed as subtraction. (Yes, this is ugly).

16 Division i :: Int i = 10 Division is slightly tricky. Trying to evaluate i / 2 will give us an error. Instead, we must write i div 2. div is for integral types, and / is for floating-point types.

17 Defining functions Recall the fact function we defined in Scheme. (define (fact n) (cond ((= n 0) 1) (else (* n (fact (- n 1)))))) We can define the same function as follows in Haskell. fact :: Integer -> Integer fact n = if n == 0 then 1 else n * fact (n-1) Remember when we said if is not often used? Here s the same function without if. fact :: Integer -> Integer fact 0 = 1 fact n = n * fact (n-1)

18 Functions in Haskell fact :: Integer -> Integer fact 0 = 1 fact n = n * fact (n-1) Note that we have given our function a type signature. This type says fact is a function from Integers to Integers. Each clause of fact is checked from top to bottom, and the first matching clause is chosen. This is an example of Haskell s pattern matching capabilities. We will see much more of this later.

19 Guards Choices can also be made based on arbitrary Boolean expressions using guards. fact :: Integer -> Integer fact n n == 0 = 1 otherwise = n * fact (n-1) Guards are always Boolean expressions. Question: What do you think otherwise evaluates to? Any number of guards can be associate with each clause. A clause s guards are checked from top to bottom, and the first one that evaluates to True is chosen. If no guard evaluates to True, matching continues with the next clause.

20 Function with multiple arguments Functions may take multiple arguments, like this add3 :: Int -> Int -> Int add3 x y z = x + y + z ex16 = add3 1 The syntax for the type of a function with multiple arguments is t1 -> t2 ->... -> tn -> result. We can partially apply the function add3 to a value, as we did when we defined ex16. Question: What do you think the type of ex16 is? Another question: How could you figure it out if you don t know the answer? Note than function application has higher precedence than any infix operator. Thus add 1 n+1 3 parses as (add3 1 n) + (1 3). Instead, write add3 1 (n+1) 3.

21 Lists Like Scheme, lists are one of the most basic types Haskell provides. nums, range, range2 :: [Integer] nums = [1,2,3,19] range = [1..100] range2 = [2,4..100] Like Python, Haskell has list comprehensions. Strings are lists of characters String is just an abbreviation for [Char]. hello1 :: [Char] hello1 = [ h, e, l, l, o ] hello2 :: String hello2 = "hello" hellosame = hello1 == hello2 -- Evaluates to True!

22 Constructing Lists The simplest list is the empty list: nil = [] Haskell has cons, but it is an infix operator, and it s name is :. We can build lists using : or by using special list notation. ex17 = 1 : [] ex18 = 3 : (1 : []) ex19 = 2 : 3 : 4 : [] ex20 = [2,3,4] == 2 : 3 : 4 : [] -- Also evaluates to True Let s write some functions on lists...

23 Haskell vs. Scheme: append In Scheme... (define (append xs ys) (if (null? xs) ys (cons (car xs) (append (cdr xs) ys)))) And in Haskell... append xs ys = if null xs then ys else head xs : append (tail xs) ys And in Haskell again... append [] ys = ys append (x:xs) ys = x : append xs ys What is the type of append? Let s give it a type signature that says

24 Making a mistake in append Let s try this variation on append: append :: [Int] -> [Int] -> [Int] append [] ys = ys append (x:xs) ys = xs : append xs ys Is this variation correct? What happens if we make the analogous mistake in the Scheme version of append? What do you think happens if we give ghci this definition?

25 GHC Errors... lecture10-examples.hs:6:20: Couldn t match expected type Int with actual type [Int] In the first argument of (:), namely xs In the expression: xs : append xs ys Failed, modules loaded: none. Prelude> Don t be scared of errors. First we are told Couldn t match expected type Int with actual type Int. This means that something was expected to have a Int, but actually had type [Int]. What something? The next line tells us: it s the first argument of (:) which is at fault, namely, xs. The next lines go on to give us a bit more context. You might not understand all of an error message, but you will learn a lot by reading it!

26 Algebraic Data Types Let s see how the Bool type is defined in the standard library: data Bool = True False data mean we are introducing a new data type. The part before the = is the name of the type we are defining. The parts after the = are the data constructors. They specify the different values this type can have, and they are separated by a vertical bar,.

27 Defining a data type for shapes We can define a new data type that represents shapes as follows. data Shape = Circle Double Double Double Rectangle Double Double Double Double The Circle data constructor has three fields: the coordinates of its center, and its radius. The Rectangle data constructor has four fields: the coordinates of its upper-left and lower-right corner. We can also define a function that calculate the area of a shape. data type that represents shapes as follows. area :: Shape -> Double area (Circle r) = pi * r ^ 2 area (Rectangle x1 y1 x2 y2) = abs (x2 - x1) * abs (y2 - y1)

28 Algebraic Data Types in General In general, an algebraic data type has one or more data constructors. Each data constructor can have zero or more arguments. Type and data constructor names must always start with a capital letter. Variables, including names of functions, must always start with a lowercase letter.

29 Pattern Matching area :: Shape -> Double area (Circle r) = pi * r ^ 2 area (Rectangle x1 y1 x2 y2) = abs (x2 - x1) * abs (y2 - y1) We ve already seen examples of pattern matching, but let s see how it works in general. Fundamentally, pattern matching is about taking apart a value by finding out which constructor it was built with. Notice how in our definition of area, names are given to the values that are associate with the data constructor. An underscore, _, is a wildcard pattern that matches anything. A pattern of the form can be used to match a value against the pattern pat while also binding the variable v to the entire value being matched. For example: firstcircle :: [Shape] -> Shape firstcircle [] = error "Urk!" firstcircle _) : _) = shape firstcircle (_:shapes) = firstcircle shapes Patterns can also be nested, as in firstcircle.

30 Pattern Matching Syntax The general syntax for pattern matching is: pat ::= _ var pat (Constructor pat 1 pat 2... pat n )

31 Case Expressions The fundamental Haskell construct for pattern matching is the case expression. In general, a case expression looks like this: case exp of pat1 -> exp1 pat2 -> exp2... In fact, the multi-clause syntax for defining functions that we have seen is just syntactic sugar for a case expression. Instead of this area :: Shape -> Double area (Circle r) = pi * r ^ 2 area (Rectangle x1 y1 x2 y2) = abs (x2 - x1) * abs (y2 - y1) we could have written this area :: Shape -> Double area shape = case shape of (Circle r) -> pi * r ^ 2 (Rectangle x1 y1 x2 y2) -> abs (x2 - x1) * abs (y2 - y1)

32 Tuples There is one more pervasive data type we haven t mentioned: tuples. Tuples have a single data constructor and can have any number of values associated with this data constructor. There is also special syntax for tuples. anintpair :: (Int, Int) anintpair = (3, 4)

33 Records It is often convenient to refer to field of a data constructor by name. radius :: Shape -> Double radius (Circle r) = r radius (Rectangle ) = error "urk!" Haskell provides syntax for defining and matching on records. data Shape = Circle { centx :: Double, centy :: Double, radius :: Double} Rectangle { ulx :: Double, uly :: Double, urx :: Double, ury :: Double } mycircle = Circle myothercircle = Circle { centx = 0, centy = 0, radius = 1 } radiusof circle = radius circle area (Circle { radius = r }) = pi * r ^ 2 area (Rectangle { ulx = x1, uly = y1, urx = x2, ury = y2 }) = abs (x2 - x1) * abs (y2 - y1)

34 Section 4 References

35 References [Hin09] Ralf Hinze. Functional pearl: La Tour D Hanoï. In Proceedings of the 14th ACM SIGPLAN International Conference on Functional Programming (ICFP 09), pages 3 10, New York, NY, USA, [Pie02] Benjamin C. Pierce. Types and Programming Languages. Cambridge, Mass, feb 2002.

### CS 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 information

### Haske 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 information

### An 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 information

### CS 320: Concepts of Programming Languages

CS 320: Concepts of Programming Languages Wayne Snyder Computer Science Department Boston University Lecture 04: Basic Haskell Continued o Polymorphic Types o Type Inference with Polymorphism o Standard

More information

### CS 457/557: Functional Languages

CS 457/557: Functional Languages Lists and Algebraic Datatypes Mark P Jones Portland State University 1 Why Lists? Lists are a heavily used data structure in many functional programs Special syntax is

More information

### CS 11 Haskell track: lecture 1

CS 11 Haskell track: lecture 1 This week: Introduction/motivation/pep talk Basics of Haskell Prerequisite Knowledge of basic functional programming e.g. Scheme, Ocaml, Erlang CS 1, CS 4 "permission of

More information

### The List Datatype. CSc 372. Comparative Programming Languages. 6 : Haskell Lists. Department of Computer Science University of Arizona

The List Datatype CSc 372 Comparative Programming Languages 6 : Haskell Lists Department of Computer Science University of Arizona collberg@gmail.com All functional programming languages have the ConsList

More information

### Solution sheet 1. Introduction. Exercise 1 - Types of values. Exercise 2 - Constructors

Solution sheet 1 Introduction Please note that there can be other solutions than those listed in this document. This is a literate Haskell file which is available as PDF, as well as literate Haskell source

More information

### FUNCTIONAL PROGRAMMING 1 HASKELL BASICS

1 FUNCTIONAL PROGRAMMING 1 HASKELL BASICS Dr. Ahmed Sallam Reference 2 Main: Introduction to Haskell Further By Brent Yorgey Functional Programming 3 Function is the atom of the language, and can be used

More information

### Practical Haskell. An introduction to functional programming. July 21, Practical Haskell. Juan Pedro Villa-Isaza. Introduction.

Practical Practical An introduction to functional programming July 21, 2011 Contents Practical Practical is fun, and that s what it s all about! Even if seems strange to you at first, don t give up. Learning

More information

### Introduction to Haskell

Introduction to Haskell Matt Mullins Texas A&M Computing Society October 6, 2009 Matt Mullins (TACS) Introduction to Haskell October 6, 2009 1 / 39 Outline Introduction to Haskell Functional Programming

More information

### Haskell 101. (Version 1 (July 18, 2012)) Juan Pedro Villa Isaza

Haskell 101 (Version 1 (July 18, 2012)) Juan Pedro Villa Isaza Haskell 101: Contents Introduction Tutorial Homework Bibliography Haskell 101: Contents Introduction Tutorial Homework Bibliography Haskell

More information

### Programming 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 information

### This example highlights the difference between imperative and functional programming. The imperative programming solution is based on an accumulator

1 2 This example highlights the difference between imperative and functional programming. The imperative programming solution is based on an accumulator (total) and a counter (i); it works by assigning

More information

### Intro. Scheme Basics. scm> 5 5. scm>

Intro Let s take some time to talk about LISP. It stands for LISt Processing a way of coding using only lists! It sounds pretty radical, and it is. There are lots of cool things to know about LISP; if

More information

### Programming Paradigms

PP 2017/18 Unit 11 Functional Programming with Haskell 1/37 Programming Paradigms Unit 11 Functional Programming with Haskell J. Gamper Free University of Bozen-Bolzano Faculty of Computer Science IDSE

More information

### Haskell Introduction Lists Other Structures Data Structures. Haskell Introduction. Mark Snyder

Outline 1 2 3 4 What is Haskell? Haskell is a functional programming language. Characteristics functional non-strict ( lazy ) pure (no side effects*) strongly statically typed available compiled and interpreted

More information

### An 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 information

### CSc 372. Comparative Programming Languages. 8 : Haskell Function Examples. Department of Computer Science University of Arizona

1/43 CSc 372 Comparative Programming Languages 8 : Haskell Function Examples Department of Computer Science University of Arizona collberg@gmail.com Copyright c 2013 Christian Collberg Functions over Lists

More information

### Harvard School of Engineering and Applied Sciences CS 152: Programming Languages

Harvard School of Engineering and Applied Sciences CS 152: Programming Languages Lecture 18 Thursday, March 29, 2018 In abstract algebra, algebraic structures are defined by a set of elements and operations

More information

### CS 440: Programming Languages and Translators, Spring 2019 Mon

Haskell, Part 4 CS 440: Programming Languages and Translators, Spring 2019 Mon 2019-01-28 More Haskell Review definition by cases Chapter 6: Higher-order functions Revisit currying map, filter Unnamed

More information

### Summer 2017 Discussion 10: July 25, Introduction. 2 Primitives and Define

CS 6A Scheme Summer 207 Discussion 0: July 25, 207 Introduction In the next part of the course, we will be working with the Scheme programming language. In addition to learning how to write Scheme programs,

More information

### A 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 information

### SML A F unctional Functional Language Language Lecture 19

SML A Functional Language Lecture 19 Introduction to SML SML is a functional programming language and acronym for Standard d Meta Language. SML has basic data objects as expressions, functions and list

More information

### Thoughts on Assignment 4 Haskell: Flow of Control

Thoughts on Assignment 4 Haskell: Flow of Control CS F331 Programming Languages CSCE A331 Programming Language Concepts Lecture Slides Monday, February 27, 2017 Glenn G. Chappell Department of Computer

More information

### Lecture 19: Functions, Types and Data Structures in Haskell

The University of North Carolina at Chapel Hill Spring 2002 Lecture 19: Functions, Types and Data Structures in Haskell Feb 25 1 Functions Functions are the most important kind of value in functional programming

More information

### Fall 2017 Discussion 7: October 25, 2017 Solutions. 1 Introduction. 2 Primitives

CS 6A Scheme Fall 207 Discussion 7: October 25, 207 Solutions Introduction In the next part of the course, we will be working with the Scheme programming language. In addition to learning how to write

More information

### CS 320 Homework One Due 2/5 11:59pm

Name: BU ID (no dashes): CS 320 Homework One Due 2/5 11:59pm Write your answers to the problems in the space indicated. Scan your solution and submit to Gradescope as a PDF file. You will receive an email

More information

### CSc 372 Comparative Programming Languages

CSc 372 Comparative Programming Languages 8 : Haskell Function Examples Christian Collberg collberg+372@gmail.com Department of Computer Science University of Arizona Copyright c 2005 Christian Collberg

More information

### CSC312 Principles of Programming Languages : Functional Programming Language. Copyright 2006 The McGraw-Hill Companies, Inc.

CSC312 Principles of Programming Languages : Functional Programming Language Overview of Functional Languages They emerged in the 1960 s with Lisp Functional programming mirrors mathematical functions:

More information

### Introduction to Typed Racket. The plan: Racket Crash Course Typed Racket and PL Racket Differences with the text Some PL Racket Examples

Introduction to Typed Racket The plan: Racket Crash Course Typed Racket and PL Racket Differences with the text Some PL Racket Examples Getting started Find a machine with DrRacket installed (e.g. the

More information

### Programming Paradigms and Languages Introduction to Haskell. dr Robert Kowalczyk WMiI UŁ

Programming Paradigms and Languages Introduction to Haskell dr Robert Kowalczyk WMiI UŁ Functional programming In functional programming (special type of declarative programming), programs are executed

More information

### Scheme: Data. CS F331 Programming Languages CSCE A331 Programming Language Concepts Lecture Slides Monday, April 3, Glenn G.

Scheme: Data CS F331 Programming Languages CSCE A331 Programming Language Concepts Lecture Slides Monday, April 3, 2017 Glenn G. Chappell Department of Computer Science University of Alaska Fairbanks ggchappell@alaska.edu

More information

### CS 320: Concepts of Programming Languages

CS 320: Concepts of Programming Languages Wayne Snyder Computer Science Department Boston University Lecture 08: Type Classes o o Review: What is a type class? Basic Type Classes: Eq, Ord, Enum, Integral,

More information

### Spring 2018 Discussion 7: March 21, Introduction. 2 Primitives

CS 61A Scheme Spring 2018 Discussion 7: March 21, 2018 1 Introduction In the next part of the course, we will be working with the Scheme programming language. In addition to learning how to write Scheme

More information

### Haskell: Lists. CS F331 Programming Languages CSCE A331 Programming Language Concepts Lecture Slides Friday, February 24, Glenn G.

Haskell: Lists CS F331 Programming Languages CSCE A331 Programming Language Concepts Lecture Slides Friday, February 24, 2017 Glenn G. Chappell Department of Computer Science University of Alaska Fairbanks

More information

### CMSC 330: Organization of Programming Languages

CMSC 330: Organization of Programming Languages CMSC330 Fall 2017 OCaml Data Types CMSC330 Fall 2017 1 OCaml Data So far, we ve seen the following kinds of data Basic types (int, float, char, string) Lists

More information

### SCHEME 8. 1 Introduction. 2 Primitives COMPUTER SCIENCE 61A. March 23, 2017

SCHEME 8 COMPUTER SCIENCE 61A March 2, 2017 1 Introduction In the next part of the course, we will be working with the Scheme programming language. In addition to learning how to write Scheme programs,

More information

### CS Lecture 5: Pattern Matching. Prof. Clarkson Fall Today s music: Puff, the Magic Dragon by Peter, Paul & Mary

CS 3110 Lecture 5: Pattern Matching Prof. Clarkson Fall 2014 Today s music: Puff, the Magic Dragon by Peter, Paul & Mary Review Features so far: variables, operators, let expressions, if expressions, functions

More information

### CSE413: Programming Languages and Implementation Racket structs Implementing languages with interpreters Implementing closures

CSE413: Programming Languages and Implementation Racket structs Implementing languages with interpreters Implementing closures Dan Grossman Fall 2014 Hi! I m not Hal J I love this stuff and have taught

More information

### Intro to Haskell Notes: Part 5

Intro to Haskell Notes: Part 5 Adrian Brasoveanu October 5, 2013 Contents 1 Curried functions and related issues 1 1.1 Curried functions......................................... 1 1.2 Partially applied

More information

### Informatics 1 Functional Programming Lectures 13 and 14 Monday 11 and Tuesday 12 November Type Classes. Don Sannella University of Edinburgh

Informatics 1 Functional Programming Lectures 13 and 14 Monday 11 and Tuesday 12 November 2013 Type Classes Don Sannella University of Edinburgh Mock exam Slots and rooms have now been assigned Mon 18

More information

### Haskell Syntax in Functions

Haskell Syntax in Functions http://igm.univ-mlv.fr/~vialette/?section=teaching Stéphane Vialette LIGM, Université Paris-Est Marne-la-Vallée December 14, 2015 Syntax in Functions Pattern Matching Pattern

More information

### Informatics 1 Functional Programming Lecture 4. Lists and Recursion. Don Sannella University of Edinburgh

Informatics 1 Functional Programming Lecture 4 Lists and Recursion Don Sannella University of Edinburgh Part I Lists and Recursion Cons and append Cons takes an element and a list. Append takes two lists.

More information

### CSCE 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 information

### n n Try tutorial on front page to get started! n spring13/ n Stack Overflow!

Announcements n Rainbow grades: HW1-6, Quiz1-5, 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 information

### Functional Programming in Haskell for A level teachers

Functional Programming in Haskell for A level teachers About this document Functional Programming is now part of the A level curriculum. This document is intended to get those who already have some programming

More information

### CMSC 330: Organization of Programming Languages. OCaml Data Types

CMSC 330: Organization of Programming Languages OCaml Data Types CMSC330 Spring 2018 1 OCaml Data So far, we ve seen the following kinds of data Basic types (int, float, char, string) Lists Ø One kind

More information

### SCHEME 7. 1 Introduction. 2 Primitives COMPUTER SCIENCE 61A. October 29, 2015

SCHEME 7 COMPUTER SCIENCE 61A October 29, 2015 1 Introduction In the next part of the course, we will be working with the Scheme programming language. In addition to learning how to write Scheme programs,

More information

### Intro to Haskell Notes: Part 1

Intro to Haskell Notes: Part 1 Adrian Brasoveanu July 1, 2013 Contents 1 Comments 2 2 Simple arithmetic 2 3 Boolean operators 2 4 Testing for equality 3 5 No covert type conversion 3 6 Functions 4 6.1

More information

### Functional Programming Lecture 1: Introduction

Functional Programming Lecture 1: Introduction Viliam Lisý Artificial Intelligence Center Department of Computer Science FEE, Czech Technical University in Prague viliam.lisy@fel.cvut.cz Acknowledgements

More information

### Haskell Scripts. Yan Huang

Haskell Scripts Yan Huang yh33@indiana.edu Last Quiz Objectives Writing Haskell programs in.hs files Note some differences between programs typed into GHCi and programs written in script files Operator

More information

### Abstract Types, Algebraic Types, and Type Classes

Informatics 1 Functional Programming Lectures 13 and 14 Monday 9 and Tuesday 10 November 2009 Abstract Types, Algebraic Types, and Type Classes Philip Wadler University of Edinburgh Reminders Tutorial

More information

### SCHEME AND CALCULATOR 5b

SCHEME AND CALCULATOR 5b COMPUTER SCIENCE 6A July 25, 203 In the next part of the course, we will be working with the Scheme programming language. In addition to learning how to write Scheme programs,

More information

### CSc 372 Comparative Programming Languages. 4 : Haskell Basics

CSc 372 Comparative Programming Languages 4 : Haskell Basics Christian Collberg Department of Computer Science University of Arizona collberg@gmail.com Copyright c 2011 Christian Collberg August 23, 2011

More information

### Programming Paradigms

PP 2017/18 Unit 12 Functions and Data Types in Haskell 1/45 Programming Paradigms Unit 12 Functions and Data Types in Haskell J. Gamper Free University of Bozen-Bolzano Faculty of Computer Science IDSE

More information

### Logical Methods in... using Haskell Getting Started

Logical Methods in... using Haskell Getting Started Jan van Eijck May 4, 2005 Abstract The purpose of this course is to teach a bit of functional programming and logic, and to connect logical reasoning

More information

### Haskell Making Our Own Types and Typeclasses

Haskell Making Our Own Types and Typeclasses http://igm.univ-mlv.fr/~vialette/?section=teaching Stéphane Vialette LIGM, Université Paris-Est Marne-la-Vallée January 13, 2015 Making Our Own Types and Typeclasses

More information

### Principles of Programming Languages

Principles of Programming Languages h"p://www.di.unipi.it/~andrea/dida2ca/plp- 14/ Prof. Andrea Corradini Department of Computer Science, Pisa Introduc;on to Hakell Lesson 27! 1 The origins: ML programming

More information

### COSE212: 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 information

### Typed Racket: Racket with Static Types

Typed Racket: Racket with Static Types Version 5.0.2 Sam Tobin-Hochstadt November 6, 2010 Typed Racket is a family of languages, each of which enforce that programs written in the language obey a type

More information

### CS1 Lecture 3 Jan. 18, 2019

CS1 Lecture 3 Jan. 18, 2019 Office hours for Prof. Cremer and for TAs have been posted. Locations will change check class website regularly First homework assignment will be available Monday evening, due

More information

### CMSC 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 information

### Macros & Streams Spring 2018 Discussion 9: April 11, Macros

CS 61A Macros & Streams Spring 2018 Discussion 9: April 11, 2018 1 Macros So far, we ve mostly explored similarities between the Python and Scheme languages. For example, the Scheme list data structure

More information

### CSE 413 Languages & Implementation. Hal Perkins Winter 2019 Structs, Implementing Languages (credits: Dan Grossman, CSE 341)

CSE 413 Languages & Implementation Hal Perkins Winter 2019 Structs, Implementing Languages (credits: Dan Grossman, CSE 341) 1 Goals Representing programs as data Racket structs as a better way to represent

More information

### Recursion and Induction: Haskell; Primitive Data Types; Writing Function Definitions

Recursion and Induction: Haskell; Primitive Data Types; Writing Function Definitions Greg Plaxton Theory in Programming Practice, Spring 2005 Department of Computer Science University of Texas at Austin

More information

### CMSC 330: Organization of Programming Languages. Functional Programming with Lists

CMSC 330: Organization of Programming Languages Functional Programming with Lists 1 Lists in OCaml The basic data structure in OCaml Lists can be of arbitrary length Implemented as a linked data structure

More information

### Haskell Programs. Haskell Fundamentals. What are Types? Some Very Basic Types. Types are very important in Haskell:

Haskell Programs We re covering material from Chapters 1-2 (and maybe 3) of the textbook. Haskell Fundamentals Prof. Susan Older A Haskell program is a series of comments and definitions. Each comment

More information

### Advanced Topics in Programming Languages Lecture 2 - Introduction to Haskell

Advanced Topics in Programming Languages Lecture 2 - Introduction to Haskell Ori Bar El Maxim Finkel 01/11/17 1 History Haskell is a lazy, committee designed, pure functional programming language that

More information

### PROGRAMMING 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 information

### CSc 372. Comparative Programming Languages. 4 : Haskell Basics. Department of Computer Science University of Arizona

1/40 CSc 372 Comparative Programming Languages 4 : Haskell Basics Department of Computer Science University of Arizona collberg@gmail.com Copyright c 2013 Christian Collberg 2/40 The Hugs Interpreter The

More information

### Shell CSCE 314 TAMU. Haskell Functions

1 CSCE 314: Programming Languages Dr. Dylan Shell Haskell Functions 2 Outline Defining Functions List Comprehensions Recursion 3 Conditional Expressions As in most programming languages, functions can

More information

### Functional Programming. Pure Functional Programming

Functional Programming Pure Functional Programming Computation is largely performed by applying functions to values. The value of an expression depends only on the values of its sub-expressions (if any).

More information

### Quiz 3; Tuesday, January 27; 5 minutes; 5 points [Solutions follow on next page]

Quiz 3; Tuesday, January 27; 5 minutes; 5 points [Solutions follow on next page] 1. Does the Java expression x + y == z have a side-effect? If so, what is it? 2. Write a function named add that can add

More information

### Scheme Tutorial. Introduction. The Structure of Scheme Programs. Syntax

Scheme Tutorial Introduction Scheme is an imperative language with a functional core. The functional core is based on the lambda calculus. In this chapter only the functional core and some simple I/O is

More information

### COMP 105 Homework: Type Systems

Due Tuesday, March 29, at 11:59 PM (updated) The purpose of this assignment is to help you learn about type systems. Setup Make a clone of the book code: git clone linux.cs.tufts.edu:/comp/105/build-prove-compare

More information

### Informatics 1 Functional Programming Lecture 9. Algebraic Data Types. Don Sannella University of Edinburgh

Informatics 1 Functional Programming Lecture 9 Algebraic Data Types Don Sannella University of Edinburgh Part I Algebraic types Everything is an algebraic type data Bool = False True data Season = Winter

More information

### Introduction to Programming, Aug-Dec 2006

Introduction to Programming, Aug-Dec 2006 Lecture 3, Friday 11 Aug 2006 Lists... We can implicitly decompose a list into its head and tail by providing a pattern with two variables to denote the two components

More information

### The Typed Racket Guide

The Typed Racket Guide Version 5.3.6 Sam Tobin-Hochstadt and Vincent St-Amour August 9, 2013 Typed Racket is a family of languages, each of which enforce

More information

### CSE 3302 Programming Languages Lecture 8: Functional Programming

CSE 3302 Programming Languages Lecture 8: Functional Programming (based on the slides by Tim Sheard) Leonidas Fegaras University of Texas at Arlington CSE 3302 L8 Spring 2011 1 Functional Programming Languages

More information

### Functional Programming and Haskell

Functional Programming and Haskell Tim Dawborn University of Sydney, Australia School of Information Technologies Tim Dawborn Functional Programming and Haskell 1/22 What are Programming Paradigms? A programming

More information

### According to Larry Wall (designer of PERL): a language by geniuses! for geniuses. Lecture 7: Haskell. Haskell 98. Haskell (cont) - Type-safe!

Lecture 7: Haskell CSC 131 Fall, 2014 Kim Bruce According to Larry Wall (designer of PERL): a language by geniuses for geniuses He s wrong at least about the latter part though you might agree when we

More information

### Functional Programming for Logicians - Lecture 1

Functional Programming for Logicians - Lecture 1 Functions, Lists, Types Malvin Gattinger 4 June 2018 module L1 where Introduction Who is who Course website: https://malv.in/2018/funcproglog/ Malvin Gattinger

More information

### CS 360 Programming Languages Interpreters

CS 360 Programming Languages Interpreters Implementing PLs Most of the course is learning fundamental concepts for using and understanding PLs. Syntax vs. semantics vs. idioms. Powerful constructs like

More information

### Parsing. Zhenjiang Hu. May 31, June 7, June 14, All Right Reserved. National Institute of Informatics

National Institute of Informatics May 31, June 7, June 14, 2010 All Right Reserved. Outline I 1 Parser Type 2 Monad Parser Monad 3 Derived Primitives 4 5 6 Outline Parser Type 1 Parser Type 2 3 4 5 6 What

More information

### CS457/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 information

### CIS 194: Homework 4. Due Wednesday, February 18, What is a Number?

CIS 194: Homework 4 Due Wednesday, February 18, 2015 What is a Number? This may sound like a deep, philosophical question, but the Haskell type system gives us a simple way to answer it. A number is any

More information

### It is better to have 100 functions operate one one data structure, than 10 functions on 10 data structures. A. Perlis

Chapter 14 Functional Programming Programming Languages 2nd edition Tucker and Noonan It is better to have 100 functions operate one one data structure, than 10 functions on 10 data structures. A. Perlis

More information

### List 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 information

### CS 360: Programming Languages Lecture 10: Logic Programming with Prolog

CS 360: Programming Languages Lecture 10: Logic Programming with Prolog Geoffrey Mainland Drexel University Section 1 Administrivia Midterm Tuesday Midterm is Tuesday, February 14! Study guide is on the

More information

### SMURF Language Reference Manual Serial MUsic Represented as Functions

SMURF Language Reference Manual Serial MUsic Represented as Functions Richard Townsend, Lianne Lairmore, Lindsay Neubauer, Van Bui, Kuangya Zhai {rt2515, lel2143, lan2135, vb2363, kz2219}@columbia.edu

More information

### Documentation for LISP in BASIC

Documentation for LISP in BASIC The software and the documentation are both Copyright 2008 Arthur Nunes-Harwitt LISP in BASIC is a LISP interpreter for a Scheme-like dialect of LISP, which happens to have

More information

### CS1 Lecture 3 Jan. 22, 2018

CS1 Lecture 3 Jan. 22, 2018 Office hours for me and for TAs have been posted, locations will change check class website regularly First homework available, due Mon., 9:00am. Discussion sections tomorrow

More information

### Chapter 1. Fundamentals of Higher Order Programming

Chapter 1 Fundamentals of Higher Order Programming 1 The Elements of Programming Any powerful language features: so does Scheme primitive data procedures combinations abstraction We will see that Scheme

More information

### CSE341: Programming Languages Lecture 9 Function-Closure Idioms. Dan Grossman Winter 2013

CSE341: Programming Languages Lecture 9 Function-Closure 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 wide-ranging

More information

### Haskell 98 in short! CPSC 449 Principles of Programming Languages

Haskell 98 in short! n Syntax and type inferencing similar to ML! n Strongly typed! n Allows for pattern matching in definitions! n Uses lazy evaluation" F definition of infinite lists possible! n Has

More information

### Applicative, traversable, foldable

Applicative, traversable, foldable Advanced functional programming - Lecture 3 Wouter Swierstra 1 Beyond the monad So far, we have seen how monads define a common abstraction over many programming patterns.

More information

### Background Operators (1E) Young Won Lim 7/7/18

Background Operators (1E) 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

More information

### TOPIC 2 INTRODUCTION TO JAVA AND DR JAVA

1 TOPIC 2 INTRODUCTION TO JAVA AND DR JAVA Notes adapted from Introduction to Computing and Programming with Java: A Multimedia Approach by M. Guzdial and B. Ericson, and instructor materials prepared

More information

### Two Types of Types. Primitive Types in Java. Using Primitive Variables. Class #07: Java Primitives. Integer types.

Class #07: Java Primitives Software Design I (CS 120): M. Allen, 13 Sep. 2018 Two Types of Types So far, we have mainly been dealing with objects, like DrawingGizmo, Window, Triangle, that are: 1. Specified

More information