Top Level Environment Comparison

Size: px
Start display at page:

Download "Top Level Environment Comparison"

Transcription

1 Top Level Environment Comparison From SML/NJ 0.93 to SML/NJ 110 (SML 97) This document is a quick reference for those who need to port code from SML/NJ 0.93 to SML/NJ 110 and later versions, which implement the new SML 97 Standard Basis. It should also be useful as a supplement for those who want to use new versions of SML/NJ in conjunction with textbooks based on the SML/NJ 0.93 Basis environment. Please send any error reports or questions regarding this document to Dave MacQueen at dbm@research.bell-labs.com. Infixes Here are the top level infix declarations for SML/NJ 0.93: infix 0 before infix 3 o := infix 4 = <> > < >= <= infixr 5 infix ^ infix 7 * / div mod quot rem SML 97 is the same except that quot and rem are no longer infixes, and are not bound at top level (use Int.quot, Int.rem). Overloading Here are the overloaded operators of 0.93: makestring : ( a -> string) {Bool.makestring, Real.makestring, Integer.makestring} print : ( a -> unit) {Bool.print, Integer.print, Real.print, String.print} ~ : ( a -> a) {Integer.~, Real.~} + : ( a * a -> a) {Integer.+, Real.+} - : ( a * a -> a) {Integer.-, Real.-} * : ( a * a -> a) {Integer.*, Real.*} < : ( a * a -> bool) {Integer.<, Real.<, String.<} > : ( a * a -> bool) {Integer.>, Real.>, String.>} <= : ( a * a -> bool) {Integer.<=, Real.<=, String.<=} >= : ( a * a -> bool) {Integer.>=, Real.>=, String.>=} abs : ( a -> a) {Integer.abs, Real.abs} SML 97 eliminates makestring and print as overloaded functions. At top level, val print = TextIO.print: string -> unit while the overloaded makestring is replaced by the functions Bool.toString, Real.toString, and Int.toString. mod, div are now overloaded on int and word types of various precisions, and / is overloaded on various

2 precisions of reals. The other arithmetic and relational operators are overloaded on more types (e.g. integers, words, reals of various sizes). The relational operators are also overloaded on chars as well as strings, and there can potentially be more than one variety of chars (e.g. Ascii, Unicode), with corresponding varieties of strings. Module Replacements The former Basis structures Array Bool General IO List Real RealArray String Vector continue to exist in SML 97, but their signatures have changed. The Ref structure no longer exists. The functions! and := are now found in General, while the type ref and constructor ref are only bound at top level. The following former Basis structures have been renamed or replaced as indicated, again with modified signatures: Bits => Word31 ByteArray => Word8Array Integer => Int IO => TextIO, BinIO Although there actually is an IO structure in SML 97, the old IO structure corresponds to the new TextIO and BinIO structures. The Top Level Environment SML/NJ 0.93 opens the following structures at top level: Ref String IO Bool List Integer Real General It then adds the overloaded bindings and infix bindings to create the top-level environment. The top level environment also includes module bindings, which we are ignoring in this document. The following table lists the elements in the SML/NJ 0.93 top-level environment (excluding overloaded symbols and infix declarations) with their corresponding elements in SML 97. The SML/NJ 0.93 top-level elements appear in the first column, grouped under subheadings corresponding to their home modules in SML/NJ The second column gives the corresponding element of the SML 97 (SML/NJ 110) Basis. This is displayed as a simple identifier when it is also bound at top level, annotated by its type if different from the type in the first column. If the corresponding element is bound at top level, but comes from a different structure, a path in italics indicates its home structure. If the corresponding element is not defined at top level, column two contains a full path (nonitalicized), once again annotated by a type if the types differ.

3 When column two contains a simple identifier, indicating it is bound at the top level in SML 97 (SML/NJ 110), the third column gives its home module in SML 97. Entries in column two that do not have a corresponding entry in column one are new top level bindings not present in SML/NJ SML/NJ 0.93 SML 97 (SML/NJ 110) No structure eqtype a ref val ref : _a -> _a ref Ref val! : a ref -> a val := : a ref * a -> unit val inc : int ref -> unit val dec : int ref -> unit ref ref : a -> a ref General.! General.:= String eqtype string exception Substring exception Chr exception Ord Char eqtype char string General.Subscript General.Chr val length : string -> int val size : string -> int val substring : string * int * int -> string val explode : string -> string list val implode : string list -> string val ^ : string * string -> string val chr : int -> string val ord : string -> int val ordof : string * int -> int IO type instream type outstream exception Io of string val std_in : instream val std_out : outstream size substring explode: string -> char list implode: char list -> string val concat: string list -> string ^ Char.chr: int -> char Char.ord: char -> int String.sub : string * int -> char val str: char -> string TextIO.instream TextIO.outstream IO.Io of {name : string, function : string, cause : exn} TextIO.stdIn : TextIO.instream TextIO.stdOut : TextIO.outstream

4 val std_err : outstream val open_in : string -> instream val open_out : string -> outstream val open_append : string -> outstream val open_string : string -> instream val close_in : instream -> unit val close_out : outstream -> unit val output : outstream * string -> unit val outputc : outstream -> string -> unit val input : instream * int -> string val inputc : instream -> int -> string val input_line : instream -> string val lookahead : instream -> string TextIO.stdErr : TextIO.outstream TextIO.openIn : string -> TextIO.instrea TextIO.openOut : string -> TextIO.outstr TextIO.openAppend : string -> TextIO.outstream TextIO.openString : string -> TextIO.instream TextIO.closeIn : TextIO.instream -> unit TextIO.closeOut : TextIO.outstream -> un TextIO.output : TextIO.outstream * strin unit TextIO.inputN : TextIO.instream * int -> string TextIO.inputLine : TextIO.instream -> st TextIO.lookahead : TextIO.instream -> ch option val end_of_stream : instream -> bool TextIO.endOfStream : TextIO.instream -> val can_input : instream -> int val flush_out : outstream -> unit val is_term_in : instream -> bool [Note 1] val is_term_out : outstream -> bool [Note 2] val set_term_in : instream * bool -> unit TextIO.canInput : TextIO.instream * int bool TextIO.flushOut : TextIO.outstream -> un val set_term_out : outstream * bool -> unit val execute : (string * string list) -> instream * outstream val execute_in_env : string * string list * string list -> instream * outstream val exportml : string -> bool val exportfn : string * (string list * string list -> unit) -> unit Unix.execute : string * string list -> Unix.proc [Note Unix.executeInEnv : string * string list * string list -> Unix.proc SMLofNJ.exportML SMLofNJ.exportFn: string * (string * string list -> OS.Process.sta -> a val TextIO.print: string -> unit Bool datatype bool = true false datatype a option = NONE SOME of a datatype bool = true false Option.option Option.NONE Option.SOME

5 val not : bool -> bool List datatype a list = nil :: of ( a * a list) not datatype a list = nil :: of ( a * a list) exception Empty exception Hd exception Tl exception Nth exception NthTail val hd : a list -> a val tl : a list -> a list val null : a list -> bool val length : a list -> int : a list * a list -> a list val rev : a list -> a list val map : ( a -> b) -> a list -> b list val fold : ( a * b -> b) -> a list -> b -> b val revfold : ( a * b -> b) -> a list -> b -> b val app : ( a -> b) -> a list -> unit val revapp : ( a -> b) -> a list -> unit val nth : a list * int -> a val nthtail : a list * int -> a list val exists : ( a -> bool) -> a list -> bool Integer eqtype int exception Sum exception Diff exception Prod exception Neg exception Quot exception Abs exception Div exception Mod exception Overflow val div : int * int -> int val mod : int * int -> int val quot : int * int -> int Empty Empty General.Subscript General.Subscript hd tl null rev map foldr : ( a * b -> b) -> b -> a list -> b foldl : ( a * b -> b) -> b -> a list -> b app: ( a -> unit) -> a list -> unit List.nth List.drop List.exists Int int General.Div General.Div General.Div div (overloaded: Int.div) mod (overloaded: Int.mod) Int.quot

6 val rem : int * int -> int val min : int * int -> int val max : int * int -> int Real eqtype real exception Sum exception Diff exception Prod exception Floor exception Sqrt exception Exp exception Ln exception Div exception Overflow val / : (real * real) -> real val real : int -> real val floor : real -> int val truncate : real -> int val ceiling : real -> int val sqrt : real -> real val sin : real -> real val cos : real -> real val arctan : real -> real val exp : real -> real val ln : real -> real General type a cont type exn type unit datatype a frag = QUOTE of string ANTIQUOTE of a Int.rem Int.min Int.max type real [not eqtype!] General.Div / (Real./,...) Real.fromInt floor trunc ceil val round : real -> int Math.sqrt Math.sin Math.cos Math.atan Math.exp Math.ln SMLofNJ.cont type exn type unit SMLofNJ.frag SMLofNJ.QUOTE SMLofNJ.ANTIQUOTE datatype order = LESS EQUAL GREATER exception Bind exception Match exception Interrupt exception Fail of string Bind Match Fail exception Option exception Subscript exception Chr

7 val use : string -> unit exception Div use (= Compiler.Interact.useFile) val callcc : ( _a cont -> _a) -> _a SMLofNJ.Cont.callcc : ( a cont -> a) -> val throw : a cont -> a -> b val o : ( b -> c) * ( a -> b) -> ( a -> c) SMLofNJ.Cont.throw val before : ( a * b) -> a before : ( a * unit) -> a val = : a * a -> bool = val <> : a * a -> bool <> o val ignore : a -> unit val exnname : exn -> string val exnmessage : exn -> string Option datatype a option = NONE SOME of a val getopt : ( a option * a) -> a val issome : a option -> bool val valof : a option -> a Other New SML 97 Elements eqtype Word.word type Substring.substring eqtype a Array.array eqtype a Vector.vector val Vector.vector : a list -> a vector Notes 1. The is_term_in function can be defined as follows: fun is_term_in (instream : TextIO.instream) = let val (rd as TextPrimIO.RD{ioDesc,...}, buf) = TextIO.StreamIO.getReader(TextIO.getInstream instream) in TextIO.setInstream (instream, TextIO.StreamIO.mkInstream(rd, SOME buf)); case iodesc of NONE => false SOME desc => (OS.IO.kind desc = OS.IO.Kind.tty) end 2. The is_term_out function can be defined as follows: fun is_term_out (outstream: TextIO.outstream) = let val (wr as TextPrimIO.WR{ioDesc,...},buf) = TextIO.StreamIO.getWriter(TextIO.getOutstream outstream) in TextIO.setOutstream (outstream, TextIO.StreamIO.mkOutstream(wr,buf)); case iodesc of NONE => false SOME desc => (OS.IO.kind desc = OS.IO.Kind.tty)

8 end

Why Standard ML? A language particularly suited to compiler implementation.

Why Standard ML? A language particularly suited to compiler implementation. Why Standard ML? A language particularly suited to compiler implementation. Efficiency Safety Simplicity Higher-order functions Static type checking with type inference Polymorphism Algebraic types and

More information

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

Introduction to SML Basic Types, Tuples, Lists, Trees and Higher-Order Functions

Introduction to SML Basic Types, Tuples, Lists, Trees and Higher-Order Functions Introduction to SML Basic Types, Tuples, Lists, Trees and Higher-Order Functions Michael R. Hansen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark c Michael R. Hansen,

More information

SML A F unctional Functional Language Language Lecture 19

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

Chapter 2 SML, a Functional Programming Language

Chapter 2 SML, a Functional Programming Language Plan Chapter 2 SML, a Functional Programming Language 1. Expressions... 2.2 2. Value declarations... 2.13 3. Function declarations... 2.16 4. Type inference... 2.18 5. Anonymous functions... 2.20 6. Specifications...

More information

2.1. Expressions. Chapter 2 SML, a Functional Programming Language. Integers. Interacting with ML

2.1. Expressions. Chapter 2 SML, a Functional Programming Language. Integers. Interacting with ML Plan Chapter 2 SML, a Functional Programming Language 1. Expressions... 2.2 2. Value declarations... 2.13 3. Function declarations... 2.16 4. Type inference... 2.18 5. Anonymous functions... 2.20 6. Specifications...

More information

Lecture 2: The Basis of SML

Lecture 2: The Basis of SML Lecture 2: The Basis of SML Jean-Noël Monette Functional Programming 1 September 9, 2013 Based on notes by Pierre Flener, Sven-Olof Nyström Jean-Noël Monette (UU) Lecture 2: The Basis of SML 1 / 73 Today

More information

Note that pcall can be implemented using futures. That is, instead of. we can use

Note that pcall can be implemented using futures. That is, instead of. we can use Note that pcall can be implemented using futures. That is, instead of (pcall F X Y Z) we can use ((future F) (future X) (future Y) (future Z)) In fact the latter version is actually more parallel execution

More information

Exercises on ML. Programming Languages. Chanseok Oh

Exercises 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 information

Types. Polymorphic Functions. Polymorphic Data Structures. More on Pattern Matching

Types. Polymorphic Functions. Polymorphic Data Structures. More on Pattern Matching Types primitive type : int, real, bool, unit, string, char,..., list type, record type, tuple type, function type; type abbreviation; datatype definition; in ML, the type for each expression is inferred

More information

CS109A ML Notes for the Week of 1/16/96. Using ML. ML can be used as an interactive language. We. shall use a version running under UNIX, called

CS109A ML Notes for the Week of 1/16/96. Using ML. ML can be used as an interactive language. We. shall use a version running under UNIX, called CS109A ML Notes for the Week of 1/16/96 Using ML ML can be used as an interactive language. We shall use a version running under UNIX, called SML/NJ or \Standard ML of New Jersey." You can get SML/NJ by

More information

2.1. Expressions. Chapter 2 ML, a Functional Programming Language. Integers. Interacting with ML

2.1. Expressions. Chapter 2 ML, a Functional Programming Language. Integers. Interacting with ML Plan Chapter 2 ML, a Functional Programming Language 1. Expressions... 2.2 2. Value declarations... 2.13 3. Function declarations... 2.16 4. Type inference... 2.18 5. Anonymous functions... 2.20 6. Specifications...

More information

A 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 A Third Look At ML Chapter Nine Modern Programming Languages, 2nd ed. 1 Outline More pattern matching Function values and anonymous functions Higher-order functions and currying Predefined higher-order

More information

Standard prelude. Appendix A. A.1 Classes

Standard prelude. Appendix A. A.1 Classes Appendix A Standard prelude In this appendix we present some of the most commonly used definitions from the standard prelude. For clarity, a number of the definitions have been simplified or modified from

More information

Chapter 3 Linear Structures: Lists

Chapter 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 information

CS 320: Concepts of Programming Languages

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

List Processing in SML

List Processing in SML List Processing in SML CS251 Programming Languages Spring 2017 Lyn Turbak, Meera Hejmadi, Mary Ruth Ngo, & Angela Wu Department of Computer Science Wellesley College Consing Elements into Lists - val nums

More information

F28PL1 Programming Languages. Lecture 11: Standard ML 1

F28PL1 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 information

Module Pervasives. Exceptions

Module Pervasives. Exceptions 1 de 14 21/01/2008 13:10 Previous Up Next Module Pervasives module Pervasives: sig.. end The initially opened module. This module provides the basic operations over the built-in types (numbers, booleans,

More information

A quick introduction to SML

A quick introduction to SML A quick introduction to SML CMSC 15300 April 9, 2004 1 Introduction Standard ML (SML) is a functional language (or higherorder language) and we will use it in this course to illustrate some of the important

More information

If we have a call. Now consider fastmap, a version of map that uses futures: Now look at the call. That is, instead of

If we have a call. Now consider fastmap, a version of map that uses futures: Now look at the call. That is, instead of If we have a call (map slow-function long-list where slow-function executes slowly and long-list is a large data structure, we can expect to wait quite a while for computation of the result list to complete.

More information

General Computer Science (CH ) Fall 2016 SML Tutorial: Practice Problems

General Computer Science (CH ) Fall 2016 SML Tutorial: Practice Problems General Computer Science (CH08-320101) Fall 2016 SML Tutorial: Practice Problems November 30, 2016 Abstract This document accompanies the traditional SML tutorial in GenCS. It contains a sequence of simple

More information

Scheme Quick Reference

Scheme Quick Reference Scheme Quick Reference COSC 18 Winter 2003 February 10, 2003 1 Introduction This document is a quick reference guide to common features of the Scheme language. It is by no means intended to be a complete

More information

Style guide for Standard ML programmers

Style guide for Standard ML programmers Style guide for Standard ML programmers COMP 105 course staff (with help from CS 312 staff at Cornell) Fall 2017 Contents 1 1 Introduction Programming-language people care about concise, precise, and elegant

More information

List Processing in SML

List Processing in SML CS251 Programming Languages Spring 2016, Lyn Turbak Department of Computer Science Wellesley College Consing Elements into Lists - val nums = 9 :: 4 :: 7 :: []; val nums = [9,4,7] : int list - 5 :: nums;

More information

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

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

Mini-ML. CS 502 Lecture 2 8/28/08

Mini-ML. CS 502 Lecture 2 8/28/08 Mini-ML CS 502 Lecture 2 8/28/08 ML This course focuses on compilation techniques for functional languages Programs expressed in Standard ML Mini-ML (the source language) is an expressive core subset of

More information

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

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

CSc 372 Comparative Programming Languages. 4 : Haskell Basics

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

Chapter 3 Linear Structures: Lists

Chapter 3 Linear Structures: Lists Plan Chapter 3 Linear Structures: Lists 1. Two constructors for lists... 3.2 2. Lists... 3.3 3. Basic operations... 3.5 4. Constructors and pattern matching... 3.6 5. Simple operations on lists... 3.9

More information

Inductive Data Types

Inductive Data Types Inductive Data Types Lars-Henrik Eriksson Functional Programming 1 Original slides by Tjark Weber Lars-Henrik Eriksson (UU) Inductive Data Types 1 / 42 Inductive Data Types Today Today New names for old

More information

Handout 2 August 25, 2008

Handout 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 Mini-ML. While Mini- ML shares strong syntactic and semantic

More information

A tour of the Haskell Prelude

A tour of the Haskell Prelude A tour of the Haskell Prelude Bernie Pope 2001 1 Haskell The Haskell language was conceived during a meeting held at the 1987 Functional Programming and Computer Architecture conference (FPCA 87). At the

More information

CSE 341 Section Handout #6 Cheat Sheet

CSE 341 Section Handout #6 Cheat Sheet Cheat Sheet Types numbers: integers (3, 802), reals (3.4), rationals (3/4), complex (2+3.4i) symbols: x, y, hello, r2d2 booleans: #t, #f strings: "hello", "how are you?" lists: (list 3 4 5) (list 98.5

More information

A lexical analyzer generator for Standard ML. Version 1.6.0, October 1994

A lexical analyzer generator for Standard ML. Version 1.6.0, October 1994 A lexical analyzer generator for Standard ML. Version 1.6.0, October 1994 Andrew W. Appel 1 James S. Mattson David R. Tarditi 2 1 Department of Computer Science, Princeton University 2 School of Computer

More information

Scheme Quick Reference

Scheme Quick Reference Scheme Quick Reference COSC 18 Fall 2003 This document is a quick reference guide to common features of the Scheme language. It is not intended to be a complete language reference, but it gives terse summaries

More information

Downloaded from Chapter 2. Functions

Downloaded from   Chapter 2. Functions Chapter 2 Functions After studying this lesson, students will be able to: Understand and apply the concept of module programming Write functions Identify and invoke appropriate predefined functions Create

More information

Scheme as implemented by Racket

Scheme as implemented by Racket Scheme as implemented by Racket (Simple view:) Racket is a version of Scheme. (Full view:) Racket is a platform for implementing and using many languages, and Scheme is one of those that come out of the

More information

CS52 - Assignment 7. Due Friday 11/13 at 5:00pm. https://xkcd.com/538/

CS52 - Assignment 7. Due Friday 11/13 at 5:00pm. https://xkcd.com/538/ CS52 - Assignment 7 Due Friday 11/13 at 5:00pm https://xkcd.com/538/ For this assignment we will be writing code that allows us to encrypt and decrypt strings using RSA encryption. Put your solution in

More information

Datatype declarations

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 information

EDAF40. 2nd June :00-19:00. WRITE ONLY ON ONE SIDE OF THE PAPER - the exams will be scanned in and only the front/ odd pages will be read.

EDAF40. 2nd June :00-19:00. WRITE ONLY ON ONE SIDE OF THE PAPER - the exams will be scanned in and only the front/ odd pages will be read. EDAF40 2nd June 2017 14:00-19:00 WRITE ONLY ON ONE SIDE OF THE PAPER - the exams will be scanned in and only the front/ odd pages will be read. DO NOT WRITE WITH OTHER COLOUR THAN BLACK - coloured text

More information

Built-in Types of Data

Built-in Types of Data Built-in Types of Data Types A data type is set of values and a set of operations defined on those values Python supports several built-in data types: int (for integers), float (for floating-point numbers),

More information

Fall 2018 Stephen Brookes. LECTURE 2 Thursday, August 30

Fall 2018 Stephen Brookes. LECTURE 2 Thursday, August 30 15-150 Fall 2018 Stephen Brookes LECTURE 2 Thursday, August 30 Announcements HOMEWORK 1 is out Read course policy Must be your OWN work Integrity No collaboration (only limited discussion) Rules will be

More information

Standard ML Introduction to Standard ML. Atsushi Ohori ohori/

Standard ML Introduction to Standard ML. Atsushi Ohori  ohori/ Standard ML Introduction to Standard ML Atsushi Ohori http://www.pllab.riec.tohoku.ac.jp/ ohori/ Preface This is a set of slides used in my lecture Programming Methodology. (So exists the next slide.)

More information

CSE 341 Sample Midterm #2

CSE 341 Sample Midterm #2 1. s For each ML expression in the left-hand column of the table below, indicate in the right-hand column its value. Be sure to (e.g., 7.0 rather than 7 for a real; Strings in quotes e.g. "hello"; true

More information

Standard ML. Exceptions

Standard ML. Exceptions Standard ML Exceptions ML Exceptions.1 Exceptions The Need An extensive part of the code is error handling A function F can return a problem solution (like int) or fail to find the solution or find that

More information

Introduction to Programming and 4Algorithms Abstract Types. Uwe R. Zimmer - The Australian National University

Introduction to Programming and 4Algorithms Abstract Types. Uwe R. Zimmer - The Australian National University Introduction to Programming and 4Algorithms 2015 Uwe R. Zimmer - The Australian National University [ Thompson2011 ] Thompson, Simon Haskell - The craft of functional programming Addison Wesley, third

More information

Basic types and definitions. Chapter 3 of Thompson

Basic types and definitions. Chapter 3 of Thompson Basic types and definitions Chapter 3 of Thompson Booleans [named after logician George Boole] Boolean values True and False are the result of tests are two numbers equal is one smaller than the other

More information

Overview. Declarative Languages D7012E. Overloading. Overloading Polymorphism Subtyping

Overview. Declarative Languages D7012E. Overloading. Overloading Polymorphism Subtyping Overview Declarative Languages D7012E Lecture 4: The Haskell type system Fredrik Bengtsson / Johan Nordlander Overloading & polymorphism Type classes instances of type classes derived type classes Type

More information

Part I: Written Problems

Part I: Written Problems CSci 4223 Homework 1 DUE: Friday, February 1, 11:59 pm Instructions. Your task is to answer three written problems, and to write eleven SML functions related to calendar dates, as well as test cases for

More information

Processadors de Llenguatge II. Functional Paradigm. Pratt A.7 Robert Harper s SML tutorial (Sec II)

Processadors de Llenguatge II. Functional Paradigm. Pratt A.7 Robert Harper s SML tutorial (Sec II) Processadors de Llenguatge II Functional Paradigm Pratt A.7 Robert Harper s SML tutorial (Sec II) Rafael Ramirez Dep Tecnologia Universitat Pompeu Fabra Paradigm Shift Imperative Paradigm State Machine

More information

Threads and Continuations COS 320, David Walker

Threads and Continuations COS 320, David Walker Threads and Continuations COS 320, David Walker Concurrency Concurrency primitives are an important part of modern programming languages. Concurrency primitives allow programmers to avoid having to specify

More information

Moscow ML Language Overview

Moscow ML Language Overview Moscow ML Language Overview Version 2.00 of June 2000 Sergei Romanenko, Russian Academy of Sciences, Moscow, Russia Claudio Russo, Cambridge University, Cambridge, United Kingdom Peter Sestoft, Royal Veterinary

More information

Lists. Adrian Groza. Department of Computer Science Technical University of Cluj-Napoca

Lists. Adrian Groza. Department of Computer Science Technical University of Cluj-Napoca Lists Adrian Groza Department of Computer Science Technical University of Cluj-Napoca Recall... Parameter evaluation Call-by-value Call-by-name Call-by-need Functions Infix operators Local declarations,

More information

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

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

Cornell University 12 Oct Solutions. (a) [9 pts] For each of the 3 functions below, pick an appropriate type for it from the list below.

Cornell University 12 Oct Solutions. (a) [9 pts] For each of the 3 functions below, pick an appropriate type for it from the list below. Cornell University 12 Oct 2006 Solutions 1. Types, Polymorphism [14 pts] (parts a b) (a) [9 pts] For each of the 3 functions below, pick an appropriate type for it from the list below. i. fun f x y = (y,

More information

CSC 307 DATA STRUCTURES AND ALGORITHM ANALYSIS IN C++ SPRING 2011

CSC 307 DATA STRUCTURES AND ALGORITHM ANALYSIS IN C++ SPRING 2011 CSC 307 DATA STRUCTURES AND ALGORITHM ANALYSIS IN C++ SPRING 2011 Date: 01/18/2011 (Due date: 01/20/2011) Name and ID (print): CHAPTER 6 USER-DEFINED FUNCTIONS I 1. The C++ function pow has parameters.

More information

Online Resource. Online introductory book on programming in SML (Standard ML): online.pdf

Online Resource. Online introductory book on programming in SML (Standard ML):   online.pdf ML Online Resource Online introductory book on programming in SML (Standard ML): http://www.cs.cmu.edu/~rwh/smlbook/ online.pdf Running SML SML is a strongly typed language - all (well-formed) expressions

More information

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

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

Introduction to Objective Caml

Introduction to Objective Caml Introduction to Objective Caml Stefan Wehr University of Freiburg. October 30, 2006 Motivation Simple Expressions and Types Functions Simple Pattern Matching Compound Datatypes I/O and Compilation Resources

More information

Why OCaml? Introduction to Objective Caml. Features of OCaml. Applications written in OCaml. Stefan Wehr

Why OCaml? Introduction to Objective Caml. Features of OCaml. Applications written in OCaml. Stefan Wehr Motivation Introduction to Objective Caml Why OCaml? Stefan Wehr University of Freiburg. October 30, 2006 Motivation Simple Expressions and Types I/O and Compilation Resources Convenient encoding of tree

More information

CSE 341 Lecture 9. type systems; type safety; defining types Ullman 6-6.2; 5.3. slides created by Marty Stepp

CSE 341 Lecture 9. type systems; type safety; defining types Ullman 6-6.2; 5.3. slides created by Marty Stepp CSE 341 Lecture 9 type systems; type safety; defining types Ullman 6-6.2; 5.3 slides created by Marty Stepp http://www.cs.washington.edu/341/ Types data type: A classification of a set of values, a set

More information

CS 11 Ocaml track: lecture 3

CS 11 Ocaml track: lecture 3 CS 11 Ocaml track: lecture 3 n Today: n A (large) variety of odds and ends n Imperative programming in Ocaml Equality/inequality operators n Two inequality operators: and!= n Two equality operators:

More information

Types, Variables, and Constants

Types, Variables, and Constants , Variables, and Constants What is a Type The space in which a value is defined Space All possible allowed values All defined operations Integer Space whole numbers +, -, x No divide 2 tj Why Types No

More information

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

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

PROGRAMMING IN HASKELL. Chapter 5 - List Comprehensions

PROGRAMMING IN HASKELL. Chapter 5 - List Comprehensions PROGRAMMING IN HASKELL Chapter 5 - List Comprehensions 0 Set Comprehensions In mathematics, the comprehension notation can be used to construct new sets from old sets. {x 2 x {1...5}} The set {1,4,9,16,25}

More information

Homework 5 ML module language assigned Thursday 20 March, due Friday 4 April

Homework 5 ML module language assigned Thursday 20 March, due Friday 4 April CS 451 Programming Paradigms, Spring 2003 1 Homework 5 ML module language assigned Thursday 20 March, due Friday 4 April Total number of points available on this homework is 200. Full credit is equivalent

More information

A Brief Introduction to Standard ML

A Brief Introduction to Standard ML A Brief Introduction to Standard ML Specification and Verification with Higher-Order Logic Arnd Poetzsch-Heffter (Slides by Jens Brandt) Software Technology Group Fachbereich Informatik Technische Universität

More information

Lecture 4: Higher Order Functions

Lecture 4: Higher Order Functions Lecture 4: Higher Order Functions Søren Haagerup Department of Mathematics and Computer Science University of Southern Denmark, Odense September 26, 2017 HIGHER ORDER FUNCTIONS The order of a function

More information

Introduction. ML-Modules & ML-Lex. Agenda. Overview. The Assignment. The Assignment. ML-Modules & ML-Lex 1. Erik (Happi) Johansson.

Introduction. ML-Modules & ML-Lex. Agenda. Overview. The Assignment. The Assignment. ML-Modules & ML-Lex 1. Erik (Happi) Johansson. ML-Modules & ML-Lex Erik (Happi) Johansson happi@csd.uu.se Room: 1338 4711033 Introduction z The lessons will be concerned with the assignment. z Today we will talk about some ML concepts you will need,

More information

Programming Paradigms Languages F28PL, Lecture 1

Programming Paradigms Languages F28PL, Lecture 1 Programming Paradigms Languages F28PL, Lecture 1 Jamie Gabbay October 14, 2016 1 / 37 About me My name is Murdoch James Gabbay everybody calls me Jamie. I got a PhD in Cambridge in 2001. Since then I have

More information

520 Principles of Programming Languages. Arithmetic. Variable Declarations. 19: Pascal

520 Principles of Programming Languages. Arithmetic. Variable Declarations. 19: Pascal Structure of a Pascal Program 520 Principles of Programming Languages 19: Pascal Christian Collberg collberg@cs.arizona.edu Department of Computer Science University of Arizona PROGRAM Name (list of files);

More information

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

A Crash Course on Standard ML

A Crash Course on Standard ML A Crash Course on Standard ML Hongwei Xi Version of November 23, 2004 1 Start Type sml-cm at a Unix wdow to get an teractive terpreter for Standard ML (SML). You can later quit the terpreter by typg ctrl-d.

More information

CSC/MAT-220: Lab 6. Due: 11/26/2018

CSC/MAT-220: Lab 6. Due: 11/26/2018 CSC/MAT-220: Lab 6 Due: 11/26/2018 In Lab 2 we discussed value and type bindings. Recall, value bindings bind a value to a variable and are intended to be static for the life of a program. Type bindings

More information

Functors signature Order = sig functor name type elem (structname:signature) = structure definition; val le : elem*elem -> bool end; elem

Functors signature Order = sig functor name type elem (structname:signature) = structure definition; val le : elem*elem -> bool end; elem Functors The general form of a functor is functor name (structname:signature) = structure definition; This functor will create a specific version of the structure definition using the structure parameter

More information

Metaprogramming in SML: PostFix and S-expressions

Metaprogramming in SML: PostFix and S-expressions Metaprogramming in SML: PostFix and S-expressions CS251 Programming Languages Spring 2018, Lyn Turbak Department of Computer Science Wellesley College Recall the Racket PostFix Interpreter ;; Contents

More information

CPS 506 Comparative Programming Languages. Programming Language Paradigm

CPS 506 Comparative Programming Languages. Programming Language Paradigm CPS 506 Comparative Programming Languages Functional Programming Language Paradigm Topics Introduction Mathematical Functions Fundamentals of Functional Programming Languages The First Functional Programming

More information

Typed Racket: Racket with Static Types

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

All the operations used in the expression are over integers. a takes a pair as argument. (a pair is also a tuple, or more specifically, a 2-tuple)

All the operations used in the expression are over integers. a takes a pair as argument. (a pair is also a tuple, or more specifically, a 2-tuple) Weekly exercises in INF3110 week 41 6-10.10.2008 Exercise 1 Exercise 6.1 in Mitchell's book a) fun a(x,y) = x+2*y; val a = fn : int * int -> int All the operations used in the expression are over integers.

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Ł 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

CSE 341 Section 5. Winter 2018

CSE 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 information

Example Scheme Function: equal

Example Scheme Function: equal ICOM 4036 Programming Languages Functional Programming Languages Mathematical Functions Fundamentals of Functional Programming Languages The First Functional Programming Language: LISP Introduction to

More information

CSE341: Programming Languages Lecture 9 Function-Closure Idioms. Dan Grossman Fall 2011

CSE341: Programming Languages Lecture 9 Function-Closure Idioms. Dan Grossman Fall 2011 CSE341: Programming Languages Lecture 9 Function-Closure 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 wide-ranging

More information

Valex: Mul*ple Value Types, Condi*onals, Dynamic Type Checking and Desugaring

Valex: Mul*ple Value Types, Condi*onals, Dynamic Type Checking and Desugaring Valex: Mul*ple Value Types, Condi*onals, Dynamic Type Checking and Desugaring CS251 Programming Languages Fall 201, Lyn Turbak Department of Computer Science Wellesley College A New Mini-Language: Valex

More information

What s in Main. Tobias Nipkow. December 5, Abstract

What s in Main. Tobias Nipkow. December 5, Abstract What s in Main Tobias Nipkow December 5, 2013 Abstract This document lists the main types, functions and syntax provided by theory Main. It is meant as a quick overview of what is available. For infix

More information

CSci 4223 Principles of Programming Languages

CSci 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 information

Pattern Matching and Abstract Data Types

Pattern Matching and Abstract Data Types Pattern Matching and Abstract Data Types Tom Murphy VII 3 Dec 2002 0-0 Outline Problem Setup Views ( Views: A Way For Pattern Matching To Cohabit With Data Abstraction, Wadler, 1986) Active Patterns (

More information

SMURF Language Reference Manual Serial MUsic Represented as Functions

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

Standard ML. Curried Functions. ML Curried Functions.1

Standard ML. Curried Functions. ML Curried Functions.1 Standard ML Curried Functions ML Curried Functions.1 Curried Functions Side Note: Infix function declaration o Curried Function declaration o Declaring via "fun" o Function Calling Order o Examples o Mixing

More information

A list is a finite sequence of elements. Elements may appear more than once

A list is a finite sequence of elements. Elements may appear more than once Standard ML Lists ML Lists.1 Lists A list is a finite sequence of elements. [3,5,9] ["a", "list" ] [] Elements may appear more than once [3,4] [4,3] [3,4,3] [3,3,4] Elements may have any type. But all

More information

Informatics 1 Functional Programming Lecture 7. Map, filter, fold. Don Sannella University of Edinburgh

Informatics 1 Functional Programming Lecture 7. Map, filter, fold. Don Sannella University of Edinburgh Informatics 1 Functional Programming Lecture 7 Map, filter, fold Don Sannella University of Edinburgh Part I Map Squares *Main> squares [1,-2,3] [1,4,9] squares :: [Int] -> [Int] squares xs [ x*x x

More information

Chapter 15. Functional Programming Languages

Chapter 15. Functional Programming Languages Chapter 15 Functional Programming Languages Copyright 2009 Addison-Wesley. All rights reserved. 1-2 Chapter 15 Topics Introduction Mathematical Functions Fundamentals of Functional Programming Languages

More information

The Typed Racket Guide

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

Basic Concepts #4. Data Step #3: Reading a SAS Data Set and Functions and Call Routines. JC Wang

Basic Concepts #4. Data Step #3: Reading a SAS Data Set and Functions and Call Routines. JC Wang Basic Concepts #4 Data Step #3: Reading a SAS Data Set and Functions and Call Routines JC Wang SET Statement SET SAS-data-name; Selected data-set-options: KEEP=/DROP= to read only wanted

More information

Higher-Order Functions

Higher-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 information

CSE3322 Programming Languages and Implementation

CSE3322 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 information

CITS3211 FUNCTIONAL PROGRAMMING. 6. Folding operators

CITS3211 FUNCTIONAL PROGRAMMING. 6. Folding operators CITS3211 FUNCTIONAL PROGRAMMING 6. Folding operators Summary: This lecture discusses an important group of higher order functions known as the folding operators. Almost any recursive function over lists

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 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

Metaprogramming in SML: PostFix and S-expressions

Metaprogramming in SML: PostFix and S-expressions Metaprogramming in SML: PostFix and S-expressions CS251 Programming Languages Spring 2017, Lyn Turbak Department of Computer Science Wellesley College Recall the Racket PostFix Interpreter ;; Contents

More information