<- previous index next ->
Functional Programming and Functional Languages
Functional Programming and Functional Languages
From Wikipedia:
In computer science, functional programming is a programming paradigm,
a style of building the structure and elements of computer programs,
that treats computation as the evaluation of mathematical functions
and avoids state and mutable data. Functional programming emphasizes
functions that produce results that depend only on their inputs and
not on the program state.i.e. pure mathematical functions.
It is a declarative programming paradigm, which means programming
is done with expressions. In functional code, the output value of
a function depends only on the arguments that are input to the function,
so calling a function f twice with the same value for an argument x
will produce the same result f(x) both times. Eliminating side effects,
i.e. changes in state that do not depend on the function inputs,
can make it much easier to understand and predict the behavior
of a program, which is one of the key motivations for the development
of functional programming.
Functional programming has its roots in lambda calculus,
a formal system developed in the 1930s to investigate computability,
the Entscheidungsproblem, function definition, function application,
and recursion. Many functional programming languages can be viewed
as elaborations on the lambda calculus, where computation is treated
as the evaluation of mathematical functions and avoids state and
mutable data. In the other well known declarative programming paradigm,
logic programming, relations are at the base of respective languages.
In contrast, imperative programming changes state with commands
in the source language, the most simple example is the assignment.
Functions do exist, not in the mathematical sense, but in the sense
of subroutine. They can have side effects that may change the value
of program state. Functions without return value therefore make sense.
Because of this, they lack referential transparency,
i.e. the same language expression can result in different values
at different times depending on the state of the executing program.
Functional programming languages, especially purely functional ones
such as Hope and Rex, have largely been emphasized in academia
rather than in commercial software development. However, prominent
functional programming languages such as Common Lisp, Scheme, Clojure,
Racket, Erlang, OCaml, Haskell, and F# have been used in industrial
and commercial applications by a wide variety of organizations.
Functional programming is also supported in some domain-specific
programming languages like R (statistics), Mathematica
(symbolic and numeric math), J, K and Q from Kx Systems (financial analysis),
XQuery/XSLT (XML), and Opal. Widespread domain-specific declarative
languages like SQL and Lex/Yacc use some elements of functional programming,
especially in eschewing mutable values.
Programming in a functional style can also be accomplished in languages
that aren't specifically designed for functional programming.
For example, the imperative Perl programming language has been the
subject of a book describing how to apply functional programming concepts.
C# 3.0 and Java 8 added constructs to facilitate the functional style.
An interesting case is that of Scala - it is frequently written in
a functional style, but the presence of side effects and mutable state
place it in a grey area between imperative and functional languages.
SML example
gauss.sml solve simultaneous equations
gauss.out output
See Wikipedia for references.
wiki functional programming
CMSC 455 Numerical Computation lectures
<- previous index next ->
-
CMSC 455 home page
-
Syllabus - class dates and subjects, homework dates, reading assignments
-
Homework assignments - the details
-
Projects -
-
Partial Lecture Notes, one per WEB page
-
Partial Lecture Notes, one big page for printing
-
Downloadable samples, source and executables
-
Some brief notes on Matlab
-
Some brief notes on Python
-
Some brief notes on Fortran 95
-
Some brief notes on Ada 95
-
An Ada math library (gnatmath95)
-
Finite difference approximations for derivatives
-
MATLAB examples, some ODE, some PDE
-
parallel threads examples
-
Reference pages on Taylor series, identities,
coordinate systems, differential operators
-
selected news related to numerical computation