ML Functions - Welcome to Computer Science
Download
Report
Transcript ML Functions - Welcome to Computer Science
Fun max (x,y) = if x > y then x else y;
ML (Meta Language)
a brief introduction
Alex Proctor and Brian Lee
For CSCI 431 at the University of North Carolina,
Asheville
Alex Proctor and Brian Lee for CSCI 431 at UNCA, Fall 2002
1
An Overview of ML
Description
ML is a high level functional programming language similar to LISP, Prolog,
and Hope.
ML is further differentiated by a strong and static type system, type inference,
and garbage collection.
ML was the first language to include statically checked polymorphic typing.
History
ML was created as a metalanguage for the Edinburgh LCF proof assistant in
1973.
It has since developed into its own language, hence the acronymn ML no
longer is a relevant descriptor of the language.
Alex Proctor and Brian Lee for CSCI 431 at UNCA, Fall 2002
2
ML: An Example Program
ML Computation: Calculation of Expressions
ML is a robust functional language that combines many of the features
of other programming languages we have studied in this course.
The unit of evaluation in ML is the expression. Every expression has a
type, possibly a value, and may or may not cause an effect.
ML also limits defined functions to only take a single parameter,
however, this parameter may be a tuple, or a ‘unit’ (the empty set).
ML is typically run in an interpretive manner.
(ML expression): fun average (x, y) = (x +y) / 2.0;
(User input): - average (5, 7);
(Resulting values): - val it = 6 : int
Alex Proctor and Brian Lee for CSCI 431 at UNCA, Fall 2002
3
ML As a Functional Language: ML is more Powerful!
ML is Powerful:
ML has many of the attributes that you would expect in a functional
language like Scheme or LISP, such as:
Computation by expression rather than execution of instruction
Declarative programming abstraction
Lambda calculus function methodology
Yet ML incorporates other features not usually found in functional
languages, such as:
Exception Handling
Garbage Collection
User defined Abstract Data Types
Strong and type handling and type inference
Alex Proctor and Brian Lee for CSCI 431 at UNCA, Fall 2002
4
ML As a Functional Language: Further Details
ML exibits referential transparency
ML variables are statically scoped
Variable assignment is a ‘once only’ operation.
Variable values do not change once assigned.
Referential transparency greatly increases the ability of a program to
be quantitatively analyzed, used as a proof, and debugged.
ML’s variables are entirely local to a called function
Variables are bound at run-time. Compiling is not often used.
Global variables don’t exist. Neither do instances of an object as
might be found in other languages supporting object abstractions.
ML can handle many of the more interesting data types
Lists, Real Numbers, User defined ADTs
Alex Proctor and Brian Lee for CSCI 431 at UNCA, Fall 2002
5
ML Functions: Extending the Functional Languages
ML functions may be of the highest order
ML uses aggressive type inference methods
ML has few standard data types, but all are extensible
Even Functions may define other Functions!, as in this example:
Fun try (a, x) = a x;
> val try = fn : (‘a -> ‘b) * ‘a -> ‘b
Try (hd, [1,2,3];
>val it = 1 : int
Try (t1, [1,2,3]);
> val it = [2, 3] : int list
Such higher order functions have great utility and are part of the
attraction of a Functional language.
Alex Proctor and Brian Lee for CSCI 431 at UNCA, Fall 2002
6
ML Functions: Extending the Functional Languages
ML supports Currying and Mapping:
Higher order functions may even embed arguments into the definition of a
new function.This is called ‘Currying’.
For Example:
Fun incr x y = x + y;
Val incr = fn : int -> int -> int
Incr 5 3;
Vali it = 8 : int
(incr 5) 3;
Val it = 8 : int
Val incr5 = incr 5;
Val incr5 = fn : int -> int
Incr5 3;
Val it = 8 : int
Alex Proctor and Brian Lee for CSCI 431 at UNCA, Fall 2002
7
ML Polymorphism:
ML broke programming ground with strong
polymorphism:
ML uses the term polymorphism to refer to the attribute of a function
to handle more than one type of parameter. List is a good example. It
works with any list of any type of elements.
The list functions are similar to Scheme, only cleaner.
The ML conception of polymorphism is different than the idea of
method overloading that the term polymorphism can also signify. We
do not mean merely having two or more functions with the same
name.
ML functions are polymorphic if they contain only polymorphic
functions and operators. For example:
Fun revPair (x, y) = (y, x)
Alex Proctor and Brian Lee for CSCI 431 at UNCA, Fall 2002
8
ML Functions: Local Variables are ‘Let’ into a Function
ML allows local variables in a function.
The syntax for local variables follows the pattern :
Let………..in…………end
As we see in the following example:
Fun circleData (radius) =
Let
Val pi = 3.1415926536
Val circumference = two * pi * radius;
Fun area radius = pi * radius * radius
In
(circumference, area (radius))
End;
Alex Proctor and Brian Lee for CSCI 431 at UNCA, Fall 2002
9
ML Flow Control: The Function Stack
Flow Control is an Interpretive Process
ML parses each line as an ML expression.
ML can use files and libraries, much like scheme.
ML performs I./O with simple grace, for example :
fun copyFile (inputFileName, outputFileName) =
Let
Val inFile = openIn inputFileName;
Val outFile = openOut outputFileName
In
( output (outFile, input inFile);
flushOut outFile;
closeOut outFile
)
End;
ML has been ported to many graphical windowing environments, such as
the unix/linux x-windowing system.
Alex Proctor and Brian Lee for CSCI 431 at UNCA, Fall 2002
10
ML Handles Exceptions
ML supports user-defined error flow control
Such exception handling makes ML an attractive alternative to other
Functional languages where this is not possible
Alex Proctor and Brian Lee for CSCI 431 at UNCA, Fall 2002
11
Conclusion: ML is a little known giant
ML should be better known and used:
ML is highly orthogonal. Most functions that work with one type of
parameter will work with any parameter. ML has good internal type
checking mechanisms which are applied to every evaluated expression
consistently.
Because ML allows for recursion, nested constructs, list functions, and
polymorphism, it is considered a highly abstracted language, capable
of implementing the most complex of programming tasks with the
most ease for the programmer.
Alex Proctor and Brian Lee for CSCI 431 at UNCA, Fall 2002
12
Conclusion: ML is a popular outcast
ML in their words:
“ML has made significant inroads into the computer science
educational and research communities. The exposure of the type
mechanism at the source language level is a feature not available in
other widely used languages. However, commercial applications of
ML programs are few, and so far it remains mostly a vehicle for
computer science research and educational use.” (That old book).
“…This may be because there are not enough…”
Gentle intro to ML: readers comments
Alex Proctor and Brian Lee for CSCI 431 at UNCA, Fall 2002
13