MELJUN CORTES Functional Programming

download MELJUN CORTES Functional Programming

of 19

Transcript of MELJUN CORTES Functional Programming

  • 7/31/2019 MELJUN CORTES Functional Programming

    1/19

    Types of programming paradigmsImperative Programming:

    Pure functional programming languages do not use assignments.

    Because LISP allows assignments, it is not a pure functional

    language. It is still considered a functional programming language,

    though.- LISP

    - Scheme

    - Standard ML

    Object Oriented Programming (OOP):

    Logic Programming:

    Concurrent Programming:

  • 7/31/2019 MELJUN CORTES Functional Programming

    2/19

    In computer science, functional programming isa programming paradigm that treats computation asthe evaluation ofmathematical functions andavoids state and mutable data. It emphasizes theapplication offunctions, in contrast to the imperative

    programmingstyle, which emphasizes changes instate.[1] Functional programming has its rootsin lambda calculus, a formal system developed in the1930s to investigate function definition, functionapplication, and recursion. Manyfunctional programming languages can be viewed aselaborations on the lambda calculus.

    http://en.wikipedia.org/wiki/Computer_sciencehttp://en.wikipedia.org/wiki/Programming_paradigmhttp://en.wikipedia.org/wiki/Function_(mathematics)http://en.wikipedia.org/wiki/Function_(mathematics)http://en.wikipedia.org/wiki/Function_(mathematics)http://en.wikipedia.org/wiki/Computationhttp://en.wikipedia.org/wiki/Program_statehttp://en.wikipedia.org/wiki/Immutable_objecthttp://en.wikipedia.org/wiki/Immutable_objecthttp://en.wikipedia.org/wiki/Function_(mathematics)http://en.wikipedia.org/wiki/Program_statehttp://en.wikipedia.org/wiki/Immutable_objecthttp://en.wikipedia.org/wiki/Imperative_programminghttp://en.wikipedia.org/wiki/Imperative_programminghttp://en.wikipedia.org/wiki/Imperative_programminghttp://en.wikipedia.org/wiki/Imperative_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Imperative_programminghttp://en.wikipedia.org/wiki/Lambda_calculushttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Lambda_calculushttp://en.wikipedia.org/wiki/Formal_systemhttp://en.wikipedia.org/wiki/Lambda_calculushttp://en.wikipedia.org/wiki/Formal_systemhttp://en.wikipedia.org/wiki/Programming_languagehttp://en.wikipedia.org/wiki/Programming_languagehttp://en.wikipedia.org/wiki/Programming_languagehttp://en.wikipedia.org/wiki/Programming_languagehttp://en.wikipedia.org/wiki/Programming_languagehttp://en.wikipedia.org/wiki/Recursionhttp://en.wikipedia.org/wiki/Formal_systemhttp://en.wikipedia.org/wiki/Lambda_calculushttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Imperative_programminghttp://en.wikipedia.org/wiki/Imperative_programminghttp://en.wikipedia.org/wiki/Immutable_objecthttp://en.wikipedia.org/wiki/Program_statehttp://en.wikipedia.org/wiki/Function_(mathematics)http://en.wikipedia.org/wiki/Computationhttp://en.wikipedia.org/wiki/Programming_paradigmhttp://en.wikipedia.org/wiki/Computer_science
  • 7/31/2019 MELJUN CORTES Functional Programming

    3/19

    In practice, the difference between a mathematicalfunction and the notion of a "function" used in imperativeprogramming is that imperative functions can have side effects,changing the value of program state. Because of this, theylackreferential transparency, i.e. the same language expression

    can result in different values at different times depending on thestate of the executing program. Conversely, in functional code,the output value of a function depends only on the argumentsthat are input to the function, so calling a functionftwice withthe same value for an argument xwill produce the same

    resultf(x) both times. Eliminating side effects can make it mucheasier to understand and predict the behavior of a program,which is one of the key motivations for the development offunctional programming.

    http://en.wikipedia.org/wiki/Side_effect_(computer_science)http://en.wikipedia.org/wiki/Referential_transparency_(computer_science)http://en.wikipedia.org/wiki/Referential_transparency_(computer_science)http://en.wikipedia.org/wiki/Side_effect_(computer_science)
  • 7/31/2019 MELJUN CORTES Functional Programming

    4/19

    Lambda calculus provides a theoretical framework for describing functions and theirevaluation. Although it is a mathematical abstraction rather than a programming language,it forms the basis of almost all functional programming languages today. An equivalenttheoretical formulation, combinatory logic, is commonly perceived as more abstract thanlambda calculus and preceded it in invention. It is used in some esoteric languagesincluding Unlambda. Combinatory logic and lambda calculus were both originallydeveloped to achieve a clearer approach to the foundations of mathematics.[25]

    An early functional-flavored language was Lisp, developed by John McCarthy whileat Massachusetts Institute of Technology (MIT) for the IBM 700/7000 series scientificcomputers in the late 1950s.[26] Lisp introduced many features now found in functionallanguages, though Lisp is technically a multi-paradigm language. Scheme and Dylan werelater attempts to simplify and improve Lisp.

    Information Processing Language (IPL) is sometimes cited as the first computer-basedfunctional programming language.[27] It is an assembly-style language for manipulating lists

    of symbols. It does have a notion of "generator", which amounts to a function accepting afunction as an argument, and, since it is an assembly-level language, code can be used asdata, so IPL can be regarded as having higher-order functions. However, it relies heavily onmutating list structure and similar imperative features.

    Kenneth E. Iverson developed APL in the early 1960s, described in his 1962 book AProgramming Language (ISBN 9780471430148). APL was the primary influence on JohnBackus'sFP. In the early 1990s, Iverson and Roger Hui created J. In the mid 1990s, ArthurWhitney, who had previously worked with Iverson, created K, which is used commercially in

    financial industries along with its descendant

    http://en.wikipedia.org/wiki/Lambda_calculushttp://en.wikipedia.org/wiki/Combinatory_logichttp://en.wikipedia.org/wiki/Combinatory_logichttp://en.wikipedia.org/wiki/Unlambdahttp://en.wikipedia.org/wiki/Unlambdahttp://en.wikipedia.org/wiki/Foundations_of_mathematicshttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Foundations_of_mathematicshttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Massachusetts_Institute_of_Technologyhttp://en.wikipedia.org/wiki/Lisp_(programming_language)http://en.wikipedia.org/wiki/IBM_700/7000_serieshttp://en.wikipedia.org/wiki/IBM_700/7000_serieshttp://en.wikipedia.org/wiki/John_McCarthy_(computer_scientist)http://en.wikipedia.org/wiki/Massachusetts_Institute_of_Technologyhttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Massachusetts_Institute_of_Technologyhttp://en.wikipedia.org/wiki/IBM_700/7000_serieshttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Scheme_(programming_language)http://en.wikipedia.org/wiki/Dylan_(programming_language)http://en.wikipedia.org/wiki/Scheme_(programming_language)http://en.wikipedia.org/wiki/Dylan_(programming_language)http://en.wikipedia.org/wiki/Information_Processing_Languagehttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Kenneth_E._Iversonhttp://en.wikipedia.org/wiki/Special:BookSources/9780471430148http://en.wikipedia.org/wiki/Special:BookSources/9780471430148http://en.wikipedia.org/wiki/Special:BookSources/9780471430148http://en.wikipedia.org/wiki/John_Backushttp://en.wikipedia.org/wiki/John_Backushttp://en.wikipedia.org/wiki/John_Backushttp://en.wikipedia.org/wiki/FP_(programming_language)http://en.wikipedia.org/wiki/Special:BookSources/9780471430148http://en.wikipedia.org/wiki/Roger_Huihttp://en.wikipedia.org/wiki/Roger_Huihttp://en.wikipedia.org/wiki/J_(programming_language)http://en.wikipedia.org/wiki/Arthur_Whitney_(computer_scientist)http://en.wikipedia.org/wiki/Arthur_Whitney_(computer_scientist)http://en.wikipedia.org/wiki/Arthur_Whitney_(computer_scientist)http://en.wikipedia.org/wiki/Arthur_Whitney_(computer_scientist)http://en.wikipedia.org/wiki/FP_(programming_language)http://en.wikipedia.org/wiki/Roger_Huihttp://en.wikipedia.org/wiki/K_(programming_language)http://en.wikipedia.org/wiki/J_(programming_language)http://en.wikipedia.org/wiki/Arthur_Whitney_(computer_scientist)http://en.wikipedia.org/wiki/Arthur_Whitney_(computer_scientist)http://en.wikipedia.org/wiki/K_(programming_language)http://en.wikipedia.org/wiki/K_(programming_language)http://en.wikipedia.org/wiki/Arthur_Whitney_(computer_scientist)http://en.wikipedia.org/wiki/Arthur_Whitney_(computer_scientist)http://en.wikipedia.org/wiki/Arthur_Whitney_(computer_scientist)http://en.wikipedia.org/wiki/J_(programming_language)http://en.wikipedia.org/wiki/Roger_Huihttp://en.wikipedia.org/wiki/Roger_Huihttp://en.wikipedia.org/wiki/Roger_Huihttp://en.wikipedia.org/wiki/FP_(programming_language)http://en.wikipedia.org/wiki/John_Backushttp://en.wikipedia.org/wiki/John_Backushttp://en.wikipedia.org/wiki/John_Backushttp://en.wikipedia.org/wiki/Special:BookSources/9780471430148http://en.wikipedia.org/wiki/Special:BookSources/9780471430148http://en.wikipedia.org/wiki/Special:BookSources/9780471430148http://en.wikipedia.org/wiki/APL_(programming_language)http://en.wikipedia.org/wiki/Kenneth_E._Iversonhttp://en.wikipedia.org/wiki/Kenneth_E._Iversonhttp://en.wikipedia.org/wiki/Kenneth_E._Iversonhttp://en.wikipedia.org/wiki/Kenneth_E._Iversonhttp://en.wikipedia.org/wiki/Kenneth_E._Iversonhttp://en.wikipedia.org/wiki/Kenneth_E._Iversonhttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Information_Processing_Languagehttp://en.wikipedia.org/wiki/Information_Processing_Languagehttp://en.wikipedia.org/wiki/Information_Processing_Languagehttp://en.wikipedia.org/wiki/Information_Processing_Languagehttp://en.wikipedia.org/wiki/Information_Processing_Languagehttp://en.wikipedia.org/wiki/Dylan_(programming_language)http://en.wikipedia.org/wiki/Scheme_(programming_language)http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/IBM_700/7000_serieshttp://en.wikipedia.org/wiki/IBM_700/7000_serieshttp://en.wikipedia.org/wiki/IBM_700/7000_serieshttp://en.wikipedia.org/wiki/IBM_700/7000_serieshttp://en.wikipedia.org/wiki/IBM_700/7000_serieshttp://en.wikipedia.org/wiki/IBM_700/7000_serieshttp://en.wikipedia.org/wiki/IBM_700/7000_serieshttp://en.wikipedia.org/wiki/Massachusetts_Institute_of_Technologyhttp://en.wikipedia.org/wiki/Massachusetts_Institute_of_Technologyhttp://en.wikipedia.org/wiki/Massachusetts_Institute_of_Technologyhttp://en.wikipedia.org/wiki/Massachusetts_Institute_of_Technologyhttp://en.wikipedia.org/wiki/Massachusetts_Institute_of_Technologyhttp://en.wikipedia.org/wiki/Massachusetts_Institute_of_Technologyhttp://en.wikipedia.org/wiki/Massachusetts_Institute_of_Technologyhttp://en.wikipedia.org/wiki/John_McCarthy_(computer_scientist)http://en.wikipedia.org/wiki/John_McCarthy_(computer_scientist)http://en.wikipedia.org/wiki/John_McCarthy_(computer_scientist)http://en.wikipedia.org/wiki/Lisp_(programming_language)http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Foundations_of_mathematicshttp://en.wikipedia.org/wiki/Foundations_of_mathematicshttp://en.wikipedia.org/wiki/Foundations_of_mathematicshttp://en.wikipedia.org/wiki/Foundations_of_mathematicshttp://en.wikipedia.org/wiki/Foundations_of_mathematicshttp://en.wikipedia.org/wiki/Unlambdahttp://en.wikipedia.org/wiki/Combinatory_logichttp://en.wikipedia.org/wiki/Combinatory_logichttp://en.wikipedia.org/wiki/Combinatory_logichttp://en.wikipedia.org/wiki/Lambda_calculushttp://en.wikipedia.org/wiki/Lambda_calculushttp://en.wikipedia.org/wiki/Lambda_calculus
  • 7/31/2019 MELJUN CORTES Functional Programming

    5/19

    A number of concepts and paradigms are specific to

    functional programming, and generally foreign

    to imperative programming (including object-

    oriented programming). However, programming

    languages are often hybrids of several programming

    paradigms, so programmers using "mostlyimperative" languages may have utilized some of

    these concepts.

    http://en.wikipedia.org/wiki/Imperative_programminghttp://en.wikipedia.org/wiki/Object-oriented_programminghttp://en.wikipedia.org/wiki/Object-oriented_programminghttp://en.wikipedia.org/wiki/Object-oriented_programminghttp://en.wikipedia.org/wiki/Object-oriented_programminghttp://en.wikipedia.org/wiki/Object-oriented_programminghttp://en.wikipedia.org/wiki/Imperative_programming
  • 7/31/2019 MELJUN CORTES Functional Programming

    6/19

    First-class and higher-orderHigher-order functions are functions that can either take otherfunctions as arguments or return them as results. In calculus, anexample of a higher-order function is the differential operator ,which returns the derivative of a function .

    Higher-order functions are closely related to first-class functions,in that higher-order functions and first-class functions both allowfunctions as arguments and results of other functions. Thedistinction between the two is subtle: "higher-order" describes amathematical concept of functions that operate on otherfunctions, while "first-class" is a computer science term that

    describes programming language entities that have no restrictionon their use (thus first-class functions can appear anywhere in theprogram that other first-class entities like numbers can, includingas arguments to other functions and as their return values).

    http://en.wikipedia.org/wiki/Higher-order_functionhttp://en.wikipedia.org/wiki/Differential_operatorhttp://en.wikipedia.org/wiki/Derivativehttp://en.wikipedia.org/wiki/Differential_operatorhttp://en.wikipedia.org/wiki/Derivativehttp://en.wikipedia.org/wiki/First-class_functionhttp://en.wikipedia.org/wiki/First-class_functionhttp://en.wikipedia.org/wiki/First-class_functionhttp://en.wikipedia.org/wiki/First-class_functionhttp://en.wikipedia.org/wiki/First-class_functionhttp://en.wikipedia.org/wiki/First-class_functionhttp://en.wikipedia.org/wiki/Derivativehttp://en.wikipedia.org/wiki/Differential_operatorhttp://en.wikipedia.org/wiki/Differential_operatorhttp://en.wikipedia.org/wiki/Differential_operatorhttp://en.wikipedia.org/wiki/Higher-order_functionhttp://en.wikipedia.org/wiki/Higher-order_functionhttp://en.wikipedia.org/wiki/Higher-order_functionhttp://en.wikipedia.org/wiki/Higher-order_functionhttp://en.wikipedia.org/wiki/Higher-order_function
  • 7/31/2019 MELJUN CORTES Functional Programming

    7/19

    Pure functionsPurely functional functions (or expressions) have no memory or I/O side effects.This means that pure functions have several useful properties, many of which canbe used to optimize the code:

    If the result of a pure expression is not used, it can be removed without affectingother expressions.

    If a pure function is called with parameters that cause no side-effects, the result isconstant with respect to that parameter list (sometimes called referentialtransparency), i.e. if the pure function is again called with the same parameters,the same result will be returned (this can enable caching optimizations suchas memoization).

    If there is no data dependency between two pure expressions, then their ordercan be reversed, or they can be performed in parallel and they cannot interfere

    with one another (in other terms, the evaluation of any pure expression is thread-safe).

    If the entire language does not allow side-effects, then any evaluation strategycan be used; this gives the compiler freedom to reorder or combine theevaluation of expressions in a program.

    http://en.wikipedia.org/wiki/Purely_functionalhttp://en.wikipedia.org/wiki/Side_effect_(computer_science)http://en.wikipedia.org/wiki/Referential_transparency_(computer_science)http://en.wikipedia.org/wiki/Referential_transparency_(computer_science)http://en.wikipedia.org/wiki/Referential_transparency_(computer_science)http://en.wikipedia.org/wiki/Referential_transparency_(computer_science)http://en.wikipedia.org/wiki/Memoizationhttp://en.wikipedia.org/wiki/Memoizationhttp://en.wikipedia.org/wiki/Parallelizationhttp://en.wikipedia.org/wiki/Parallelizationhttp://en.wikipedia.org/wiki/Thread-safehttp://en.wikipedia.org/wiki/Thread-safehttp://en.wikipedia.org/wiki/Thread-safehttp://en.wikipedia.org/wiki/Thread-safehttp://en.wikipedia.org/wiki/Thread-safehttp://en.wikipedia.org/wiki/Thread-safehttp://en.wikipedia.org/wiki/Thread-safehttp://en.wikipedia.org/wiki/Parallelizationhttp://en.wikipedia.org/wiki/Memoizationhttp://en.wikipedia.org/wiki/Referential_transparency_(computer_science)http://en.wikipedia.org/wiki/Referential_transparency_(computer_science)http://en.wikipedia.org/wiki/Referential_transparency_(computer_science)http://en.wikipedia.org/wiki/Side_effect_(computer_science)http://en.wikipedia.org/wiki/Side_effect_(computer_science)http://en.wikipedia.org/wiki/Side_effect_(computer_science)http://en.wikipedia.org/wiki/Purely_functionalhttp://en.wikipedia.org/wiki/Purely_functionalhttp://en.wikipedia.org/wiki/Purely_functional
  • 7/31/2019 MELJUN CORTES Functional Programming

    8/19

    RecursionIteration (looping) in functional languages is usually accomplished via recursion. Recursivefunctions invoke themselves, allowing an operation to be performed over and over. Recursion mayrequire maintaining a stack, but tail recursion can be recognized and optimized by a compiler into thesame code used to implement iteration in imperative languages. The Scheme language standard requiresimplementations to recognize and optimize tail recursion. Tail recursion optimization can beimplemented by transforming the program into continuation passing style during compiling, amongother approaches.

    Common patterns of recursion can be factored out using higher order functions,with catamorphisms and anamorphisms (or "folds" and "unfolds") being the most obvious examples.Such higher order functions play a role analogous to built-in control structures suchas loops in imperative languages.

    Most general purpose functional programming languages allow unrestricted recursion and are Turingcomplete, which makes the halting problem undecidable, can cause unsoundness of equationalreasoning, and generally requires the introduction of inconsistency into the logic expressed by thelanguage's type system. Some special purpose languages such as Coq allow only well-founded recursionand are strongly normalizing (nonterminating computations can be expressed only with infinite streams

    of values calledcodata). As a consequence, these languages fail to be Turing complete and expressingcertain functions in them is impossible, but they can still express a wide class of interestingcomputations while avoiding the problems introduced by unrestricted recursion. Functionalprogramming limited to well-founded recursion with a few other constraints is called total functionalprogramming.

    http://en.wikipedia.org/wiki/Recursion_(computer_science)http://en.wikipedia.org/wiki/Recursion_(computer_science)http://en.wikipedia.org/wiki/Recursionhttp://en.wikipedia.org/wiki/Recursion_(computer_science)http://en.wikipedia.org/wiki/Recursion_(computer_science)http://en.wikipedia.org/wiki/Tail_recursionhttp://en.wikipedia.org/wiki/Tail_recursionhttp://en.wikipedia.org/wiki/Scheme_(programming_language)http://en.wikipedia.org/wiki/Scheme_(programming_language)http://en.wikipedia.org/wiki/Continuation_passing_stylehttp://en.wikipedia.org/wiki/Continuation_passing_stylehttp://en.wikipedia.org/wiki/Catamorphismhttp://en.wikipedia.org/wiki/Anamorphismhttp://en.wikipedia.org/wiki/Catamorphismhttp://en.wikipedia.org/wiki/Anamorphismhttp://en.wikipedia.org/wiki/Program_loopshttp://en.wikipedia.org/wiki/Imperative_languageshttp://en.wikipedia.org/wiki/Turing_completehttp://en.wikipedia.org/wiki/Halting_problemhttp://en.wikipedia.org/wiki/Undecidable_problemhttp://en.wikipedia.org/wiki/Equational_reasoninghttp://en.wikipedia.org/wiki/Equational_reasoninghttp://en.wikipedia.org/wiki/Equational_reasoninghttp://en.wikipedia.org/wiki/Equational_reasoninghttp://en.wikipedia.org/wiki/Halting_problemhttp://en.wikipedia.org/wiki/Undecidable_problemhttp://en.wikipedia.org/wiki/Inconsistencyhttp://en.wikipedia.org/wiki/Inconsistencyhttp://en.wikipedia.org/wiki/Equational_reasoninghttp://en.wikipedia.org/wiki/Equational_reasoninghttp://en.wikipedia.org/wiki/Type_systemhttp://en.wikipedia.org/wiki/Inconsistencyhttp://en.wikipedia.org/wiki/Coqhttp://en.wikipedia.org/wiki/Well-foundedhttp://en.wikipedia.org/wiki/Strongly_normalizinghttp://en.wikipedia.org/wiki/Strongly_normalizinghttp://en.wikipedia.org/wiki/Strongly_normalizinghttp://en.wikipedia.org/wiki/Coqhttp://en.wikipedia.org/wiki/Well-foundedhttp://en.wikipedia.org/wiki/Strongly_normalizinghttp://en.wikipedia.org/wiki/Codatahttp://en.wikipedia.org/wiki/Total_functional_programminghttp://en.wikipedia.org/wiki/Total_functional_programminghttp://en.wikipedia.org/wiki/Total_functional_programminghttp://en.wikipedia.org/wiki/Total_functional_programminghttp://en.wikipedia.org/wiki/Total_functional_programminghttp://en.wikipedia.org/wiki/Total_functional_programminghttp://en.wikipedia.org/wiki/Total_functional_programminghttp://en.wikipedia.org/wiki/Total_functional_programminghttp://en.wikipedia.org/wiki/Total_functional_programminghttp://en.wikipedia.org/wiki/Codatahttp://en.wikipedia.org/wiki/Strongly_normalizinghttp://en.wikipedia.org/wiki/Strongly_normalizinghttp://en.wikipedia.org/wiki/Strongly_normalizinghttp://en.wikipedia.org/wiki/Well-foundedhttp://en.wikipedia.org/wiki/Well-foundedhttp://en.wikipedia.org/wiki/Well-foundedhttp://en.wikipedia.org/wiki/Coqhttp://en.wikipedia.org/wiki/Type_systemhttp://en.wikipedia.org/wiki/Type_systemhttp://en.wikipedia.org/wiki/Type_systemhttp://en.wikipedia.org/wiki/Inconsistencyhttp://en.wikipedia.org/wiki/Equational_reasoninghttp://en.wikipedia.org/wiki/Equational_reasoninghttp://en.wikipedia.org/wiki/Equational_reasoninghttp://en.wikipedia.org/wiki/Undecidable_problemhttp://en.wikipedia.org/wiki/Halting_problemhttp://en.wikipedia.org/wiki/Halting_problemhttp://en.wikipedia.org/wiki/Halting_problemhttp://en.wikipedia.org/wiki/Turing_completehttp://en.wikipedia.org/wiki/Turing_completehttp://en.wikipedia.org/wiki/Turing_completehttp://en.wikipedia.org/wiki/Imperative_languageshttp://en.wikipedia.org/wiki/Imperative_languageshttp://en.wikipedia.org/wiki/Imperative_languageshttp://en.wikipedia.org/wiki/Program_loopshttp://en.wikipedia.org/wiki/Anamorphismhttp://en.wikipedia.org/wiki/Catamorphismhttp://en.wikipedia.org/wiki/Continuation_passing_stylehttp://en.wikipedia.org/wiki/Continuation_passing_stylehttp://en.wikipedia.org/wiki/Continuation_passing_stylehttp://en.wikipedia.org/wiki/Continuation_passing_stylehttp://en.wikipedia.org/wiki/Continuation_passing_stylehttp://en.wikipedia.org/wiki/Scheme_(programming_language)http://en.wikipedia.org/wiki/Tail_recursionhttp://en.wikipedia.org/wiki/Tail_recursionhttp://en.wikipedia.org/wiki/Tail_recursionhttp://en.wikipedia.org/wiki/Recursion_(computer_science)http://en.wikipedia.org/wiki/Recursion_(computer_science)http://en.wikipedia.org/wiki/Recursion_(computer_science)http://en.wikipedia.org/wiki/Recursionhttp://en.wikipedia.org/wiki/Iteration
  • 7/31/2019 MELJUN CORTES Functional Programming

    9/19

    Strict versus non-strict evaluationFunctional languages can be categorized by whether they use strict(eager) or non-strict (lazy) evaluation, concepts that refer to how functionarguments are processed when an expression is being evaluated. The technicaldifference is in the denotational semantics of expressions containing failing ordivergent computations. Under strict evaluation, the evaluation of any termcontaining a failing subterm will itself fail. For example, the expression:

    print length([2+1, 3*2, 1/0, 5-4])will fail under strict evaluation because of the division by zero in the thirdelement of the list. Under nonstrict evaluation, the length function will return thevalue 4 (i.e., the number of items in the list), since evaluating it will not attemptto evaluate the terms making up the list. In brief, strict evaluation always fullyevaluates function arguments before invoking the function. Non-strict evaluationdoes not evaluate function arguments unless their values are required to evaluate

    the function call itself.The usual implementation strategy for non-strict evaluation in functionallanguages is graph reduction.[31] Non-strict evaluation is used by default in severalpure functional languages, including Miranda, Clean and Haskell.

    http://en.wikipedia.org/wiki/Denotational_semanticshttp://en.wikipedia.org/wiki/Denotational_semanticshttp://en.wikipedia.org/wiki/Graph_reductionhttp://en.wikipedia.org/wiki/Graph_reductionhttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Miranda_(programming_language)http://en.wikipedia.org/wiki/Clean_(programming_language)http://en.wikipedia.org/wiki/Haskell_(programming_language)http://en.wikipedia.org/wiki/Miranda_(programming_language)http://en.wikipedia.org/wiki/Clean_(programming_language)http://en.wikipedia.org/wiki/Haskell_(programming_language)http://en.wikipedia.org/wiki/Haskell_(programming_language)http://en.wikipedia.org/wiki/Clean_(programming_language)http://en.wikipedia.org/wiki/Miranda_(programming_language)http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Graph_reductionhttp://en.wikipedia.org/wiki/Graph_reductionhttp://en.wikipedia.org/wiki/Graph_reductionhttp://en.wikipedia.org/wiki/Denotational_semanticshttp://en.wikipedia.org/wiki/Denotational_semanticshttp://en.wikipedia.org/wiki/Denotational_semantics
  • 7/31/2019 MELJUN CORTES Functional Programming

    10/19

    Strict versus non-strict evaluationExample:

    print length([2+1, 3*2, 1/0, 5-4])

    --will fail under strict evaluation because of

    the division by zero in the third element of

    the list. Under nonstrict evaluation, the

    length function will return the value 4

  • 7/31/2019 MELJUN CORTES Functional Programming

    11/19

    Type systemsEspecially since the development of HindleyMilner type inference in the 1970s, functionalprogramming languages have tended to use typed lambda calculus, as opposed to theuntypedlambda calculus used in Lisp and its variants (such as Scheme). The use of algebraicdatatypes and pattern matching makes manipulation of complex data structures convenient andexpressive; the presence of strong compile-time type checking makes programs more reliable,while type inference frees the programmer from the need to manually declare types to thecompiler.

    Some research-oriented functional languages such as Coq, Agda, Cayenne, and Epigram are basedon intuitionistic type theory, which allows types to depend on terms. Such types arecalled dependent types. These type systems do not have decidable type inference and are difficultto understand and program with[citation needed]. But dependent types can express arbitrarypropositions in predicate logic. Through the CurryHoward isomorphism, then, well-typed

    programs in these languages become a means of writing formalmathematical proofs from which acompiler can generatecertified code. While these languages are mainly of interest in academicresearch (including in formalized mathematics), they have begun to be used in engineering aswell. Compcert is a compiler for a subset of the C programming language that is written in Coqand formally verified.

    http://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_inferencehttp://en.wikipedia.org/wiki/Typed_lambda_calculushttp://en.wikipedia.org/wiki/Typed_lambda_calculushttp://en.wikipedia.org/wiki/Typed_lambda_calculushttp://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_inferencehttp://en.wikipedia.org/wiki/Untyped_lambda_calculushttp://en.wikipedia.org/wiki/Untyped_lambda_calculushttp://en.wikipedia.org/wiki/Typed_lambda_calculushttp://en.wikipedia.org/wiki/Algebraic_datatypeshttp://en.wikipedia.org/wiki/Algebraic_datatypeshttp://en.wikipedia.org/wiki/Algebraic_datatypeshttp://en.wikipedia.org/wiki/Untyped_lambda_calculushttp://en.wikipedia.org/wiki/Pattern_matchinghttp://en.wikipedia.org/wiki/Pattern_matchinghttp://en.wikipedia.org/wiki/Algebraic_datatypeshttp://en.wikipedia.org/wiki/Algebraic_datatypeshttp://en.wikipedia.org/wiki/Pattern_matchinghttp://en.wikipedia.org/wiki/Type_inferencehttp://en.wikipedia.org/wiki/Type_inferencehttp://en.wikipedia.org/wiki/Intuitionistic_type_theoryhttp://en.wikipedia.org/wiki/Coqhttp://en.wikipedia.org/wiki/Agda_(theorem_prover)http://en.wikipedia.org/wiki/Cayenne_(programming_language)http://en.wikipedia.org/wiki/Epigram_(programming_language)http://en.wikipedia.org/wiki/Intuitionistic_type_theoryhttp://en.wikipedia.org/wiki/Dependent_typehttp://en.wikipedia.org/wiki/Intuitionistic_type_theoryhttp://en.wikipedia.org/wiki/Dependent_typehttp://en.wikipedia.org/wiki/Wikipedia:Citation_neededhttp://en.wikipedia.org/wiki/Predicate_logichttp://en.wikipedia.org/wiki/Wikipedia:Citation_neededhttp://en.wikipedia.org/wiki/Curry%E2%80%93Howard_isomorphismhttp://en.wikipedia.org/wiki/Predicate_logichttp://en.wikipedia.org/wiki/Curry%E2%80%93Howard_isomorphismhttp://en.wikipedia.org/wiki/Curry%E2%80%93Howard_isomorphismhttp://en.wikipedia.org/wiki/Curry%E2%80%93Howard_isomorphismhttp://en.wikipedia.org/wiki/Mathematical_proofhttp://en.wikipedia.org/wiki/Mathematical_proofhttp://en.wikipedia.org/wiki/Formal_verificationhttp://en.wikipedia.org/wiki/Mathematical_proofhttp://en.wikipedia.org/wiki/Formalized_mathematicshttp://en.wikipedia.org/wiki/Formalized_mathematicshttp://en.wikipedia.org/wiki/Formalized_mathematicshttp://en.wikipedia.org/wiki/Compcerthttp://en.wikipedia.org/wiki/Compilerhttp://en.wikipedia.org/wiki/Compilerhttp://en.wikipedia.org/wiki/Formalized_mathematicshttp://en.wikipedia.org/wiki/C_(programming_language)http://en.wikipedia.org/wiki/Compcerthttp://en.wikipedia.org/wiki/Compilerhttp://en.wikipedia.org/wiki/C_(programming_language)http://en.wikipedia.org/wiki/C_(programming_language)http://en.wikipedia.org/wiki/C_(programming_language)http://en.wikipedia.org/wiki/C_(programming_language)http://en.wikipedia.org/wiki/C_(programming_language)http://en.wikipedia.org/wiki/C_(programming_language)http://en.wikipedia.org/wiki/Compilerhttp://en.wikipedia.org/wiki/Compcerthttp://en.wikipedia.org/wiki/Formalized_mathematicshttp://en.wikipedia.org/wiki/Formalized_mathematicshttp://en.wikipedia.org/wiki/Formalized_mathematicshttp://en.wikipedia.org/wiki/Formal_verificationhttp://en.wikipedia.org/wiki/Formal_verificationhttp://en.wikipedia.org/wiki/Formal_verificationhttp://en.wikipedia.org/wiki/Mathematical_proofhttp://en.wikipedia.org/wiki/Mathematical_proofhttp://en.wikipedia.org/wiki/Mathematical_proofhttp://en.wikipedia.org/wiki/Curry%E2%80%93Howard_isomorphismhttp://en.wikipedia.org/wiki/Curry%E2%80%93Howard_isomorphismhttp://en.wikipedia.org/wiki/Curry%E2%80%93Howard_isomorphismhttp://en.wikipedia.org/wiki/Curry%E2%80%93Howard_isomorphismhttp://en.wikipedia.org/wiki/Curry%E2%80%93Howard_isomorphismhttp://en.wikipedia.org/wiki/Predicate_logichttp://en.wikipedia.org/wiki/Predicate_logichttp://en.wikipedia.org/wiki/Predicate_logichttp://en.wikipedia.org/wiki/Wikipedia:Citation_neededhttp://en.wikipedia.org/wiki/Wikipedia:Citation_neededhttp://en.wikipedia.org/wiki/Wikipedia:Citation_neededhttp://en.wikipedia.org/wiki/Dependent_typehttp://en.wikipedia.org/wiki/Dependent_typehttp://en.wikipedia.org/wiki/Dependent_typehttp://en.wikipedia.org/wiki/Intuitionistic_type_theoryhttp://en.wikipedia.org/wiki/Intuitionistic_type_theoryhttp://en.wikipedia.org/wiki/Intuitionistic_type_theoryhttp://en.wikipedia.org/wiki/Intuitionistic_type_theoryhttp://en.wikipedia.org/wiki/Intuitionistic_type_theoryhttp://en.wikipedia.org/wiki/Epigram_(programming_language)http://en.wikipedia.org/wiki/Cayenne_(programming_language)http://en.wikipedia.org/wiki/Agda_(theorem_prover)http://en.wikipedia.org/wiki/Coqhttp://en.wikipedia.org/wiki/Type_inferencehttp://en.wikipedia.org/wiki/Type_inferencehttp://en.wikipedia.org/wiki/Type_inferencehttp://en.wikipedia.org/wiki/Pattern_matchinghttp://en.wikipedia.org/wiki/Pattern_matchinghttp://en.wikipedia.org/wiki/Pattern_matchinghttp://en.wikipedia.org/wiki/Algebraic_datatypeshttp://en.wikipedia.org/wiki/Algebraic_datatypeshttp://en.wikipedia.org/wiki/Algebraic_datatypeshttp://en.wikipedia.org/wiki/Untyped_lambda_calculushttp://en.wikipedia.org/wiki/Untyped_lambda_calculushttp://en.wikipedia.org/wiki/Untyped_lambda_calculushttp://en.wikipedia.org/wiki/Untyped_lambda_calculushttp://en.wikipedia.org/wiki/Untyped_lambda_calculushttp://en.wikipedia.org/wiki/Typed_lambda_calculushttp://en.wikipedia.org/wiki/Typed_lambda_calculushttp://en.wikipedia.org/wiki/Typed_lambda_calculushttp://en.wikipedia.org/wiki/Typed_lambda_calculushttp://en.wikipedia.org/wiki/Typed_lambda_calculushttp://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_inferencehttp://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_inferencehttp://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_inferencehttp://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_inferencehttp://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_inferencehttp://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_inferencehttp://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_inference
  • 7/31/2019 MELJUN CORTES Functional Programming

    12/19

    Functional programming innon-functional languages

    It is possible to use a functional style of programming in languages that arenot traditionally considered functional languages.[38] Among imperativeprogramming languages, the Dprogramming language's solid support forfunctional programming stands out.[citation needed] For example, D has a puremodifier to enforce functional purity. Only Fortran 95 has something similar.[39]

    First class functions have slowly been added to mainstream languages. For

    example, in early 1994, support for lambda, filter, map, and reduce was addedto Python. Then during the development of Python 3000, Guido vanRossum called for the removal of these features. So far, onlythe reduce function has been removed,[40] and it remains accessible viathe functools standard library module.[41] First class functions were alsointroduced in PHP 5.3, Visual Basic 9, C# 3.0, and C++11.

    The Language Integrated Query (LINQ) feature, with its many incarnations, isan obvious and powerful use of functional programming in .NET.

    In Java, anonymous classes can sometimes be used to simulate closures;[citationneeded

    ] however, anonymous classes are not always proper replacementsto closures because they have more limited capabilities.

    Many object-orienteddesign patternsare expressible in functionalprogramming terms: for example, the strategy pattern simply dictates use of ahigher-order function, and thevisitorpattern roughly corresponds toa catamorphism, orfold.

    Similarly, the idea of immutable data from functional programming is oftenincluded in imperative programming languages[42], for example the tuple inPython, which is an immutable array.

    http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/D_(programming_language)http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/D_(programming_language)http://en.wikipedia.org/wiki/Wikipedia:Citation_neededhttp://en.wikipedia.org/wiki/Wikipedia:Citation_neededhttp://en.wikipedia.org/wiki/Fortran_95http://en.wikipedia.org/wiki/Fortran_95http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Python_(programming_language)http://en.wikipedia.org/wiki/Guido_van_Rossumhttp://en.wikipedia.org/wiki/Guido_van_Rossumhttp://en.wikipedia.org/wiki/Guido_van_Rossumhttp://en.wikipedia.org/wiki/Python_(programming_language)http://en.wikipedia.org/wiki/Guido_van_Rossumhttp://en.wikipedia.org/wiki/Guido_van_Rossumhttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/PHPhttp://en.wikipedia.org/wiki/Visual_Basichttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/C%2B%2B11http://en.wikipedia.org/wiki/PHPhttp://en.wikipedia.org/wiki/Visual_Basichttp://en.wikipedia.org/wiki/C_Sharp_(programming_language)http://en.wikipedia.org/wiki/C%2B%2B11http://en.wikipedia.org/wiki/Language_Integrated_Queryhttp://en.wikipedia.org/wiki/.NET_Frameworkhttp://en.wikipedia.org/wiki/.NET_Frameworkhttp://en.wikipedia.org/wiki/Wikipedia:Citation_neededhttp://en.wikipedia.org/wiki/Wikipedia:Citation_neededhttp://en.wikipedia.org/wiki/Java_(programming_language)http://en.wikipedia.org/wiki/Anonymous_classhttp://en.wikipedia.org/wiki/Closure_(computer_science)http://en.wikipedia.org/wiki/Wikipedia:Citation_neededhttp://en.wikipedia.org/wiki/Wikipedia:Citation_neededhttp://en.wikipedia.org/wiki/Closure_(computer_science)http://en.wikipedia.org/wiki/Closure_(computer_science)http://en.wikipedia.org/wiki/Object-orientedhttp://en.wikipedia.org/wiki/Design_pattern_(computer_science)http://en.wikipedia.org/wiki/Strategy_patternhttp://en.wikipedia.org/wiki/Visitor_(design_pattern)http://en.wikipedia.org/wiki/Strategy_patternhttp://en.wikipedia.org/wiki/Catamorphismhttp://en.wikipedia.org/wiki/Fold_(higher-order_function)http://en.wikipedia.org/wiki/Visitor_(design_pattern)http://en.wikipedia.org/wiki/Catamorphismhttp://en.wikipedia.org/wiki/Fold_(higher-order_function)http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Fold_(higher-order_function)http://en.wikipedia.org/wiki/Catamorphismhttp://en.wikipedia.org/wiki/Visitor_(design_pattern)http://en.wikipedia.org/wiki/Strategy_patternhttp://en.wikipedia.org/wiki/Design_pattern_(computer_science)http://en.wikipedia.org/wiki/Object-orientedhttp://en.wikipedia.org/wiki/Object-orientedhttp://en.wikipedia.org/wiki/Object-orientedhttp://en.wikipedia.org/wiki/Closure_(computer_science)http://en.wikipedia.org/wiki/Wikipedia:Citation_neededhttp://en.wikipedia.org/wiki/Wikipedia:Citation_neededhttp://en.wikipedia.org/wiki/Closure_(computer_science)http://en.wikipedia.org/wiki/Anonymous_classhttp://en.wikipedia.org/wiki/Java_(programming_language)http://en.wikipedia.org/wiki/.NET_Frameworkhttp://en.wikipedia.org/wiki/Language_Integrated_Queryhttp://en.wikipedia.org/wiki/C%2B%2B11http://en.wikipedia.org/wiki/C_Sharp_(programming_language)http://en.wikipedia.org/wiki/Visual_Basichttp://en.wikipedia.org/wiki/PHPhttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Guido_van_Rossumhttp://en.wikipedia.org/wiki/Guido_van_Rossumhttp://en.wikipedia.org/wiki/Python_(programming_language)http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Fortran_95http://en.wikipedia.org/wiki/Wikipedia:Citation_neededhttp://en.wikipedia.org/wiki/D_(programming_language)http://en.wikipedia.org/wiki/Functional_programming
  • 7/31/2019 MELJUN CORTES Functional Programming

    13/19

    Coding stylesImperative programs tend toemphasize the series of steps taken by

    a program in carrying out an action,while functional programs tend toemphasize the composition andarrangement of functions, oftenwithout specifying explicit steps.

  • 7/31/2019 MELJUN CORTES Functional Programming

    14/19

    Coding stylesExample :

    // Fibonacci numbers, imperative style

    int fibonacci(int iterations) {

    int first = 0, second = 1; // seed values

    for (int i = 0; i < iterations - 1; ++i) {

    int sum = first + second;

    first = second;

    second = sum;

    }

    return first;

    }

    int main() {

    std::cout

  • 7/31/2019 MELJUN CORTES Functional Programming

    15/19

    Coding stylesExample :A functional version (in Haskell) has a different feel to it:

    -- Fibonacci numbers, functional style:

    -- describe an infinite list based on the recurrence relation for Fibonacci numbers:

    fibRecurrence first second = first : fibRecurrence second (first + second)

    -- describe fibonacci list as fibRecurrence with initial values 0 and 1

    ibonacci = fibRecurrence 0 1

    -- describe action to print the 10th element of the fibonacci list

    main = print (fibonacci !! 10)

    http://en.wikipedia.org/wiki/Haskell_(programming_language)http://en.wikipedia.org/wiki/Haskell_(programming_language)
  • 7/31/2019 MELJUN CORTES Functional Programming

    16/19

    Coding stylesExample :

    The same program in Erlang provides a simple example ofhow functionallanguages in general do not require their syntax to contain an "if" statement.-module(fibonacci).

    -export([start/1]).

    %% Fibonacci numbers in Erlang

    start(N) -> do_fib(0,1,N).

    do_fib(_,B,1) -> B;

    do_fib(A,B,N) -> do_fib(B,A+B,N-1).

    This program is contained within a module called "fibonacci" and declares that the start/1function will be visible from outside the scope of this module. The function start/1 takes aninteger parameter value and then calls an internal function called do_fib/3.

    http://en.wikipedia.org/wiki/Erlang_(programming_language)http://en.wikipedia.org/wiki/If_statementhttp://en.wikipedia.org/wiki/If_statementhttp://en.wikipedia.org/wiki/Erlang_(programming_language)
  • 7/31/2019 MELJUN CORTES Functional Programming

    17/19

    In direct contrast to theimperative coding styleErlang does not need an "if" statement because the Erlang runtime willexamine the parameters being passed to a function, and call the first

    function having a signature that matches the current pattern of parameters.(Erlang syntax does provide an "if" statement, but it is considered syntacticsugar and, compared to its usage in imperative languages, plays only a minorrole in application logic design).

    Generally speaking, it is unnecessary to code an explicit test for a parametervalue because such a test is implicitly performed by providing a set of

    function signatures that describe the different patterns of values that couldbe received by a function.

    In the case above, the first version of do_fib/3 will only be called when thethird parameter has the precise the value of 1. In all other cases, the secondversion of do_fib/3 will be called.

  • 7/31/2019 MELJUN CORTES Functional Programming

    18/19

    LISP:

    Writing a program to compute a

    factorial, a similarly recursive

    mathematical problem, in Lisp results in:

    (defun fact (x) (if (= x 1) 1 (* x (fact (- x 1)))))

    The program can then be called as(fact 10)

    http://en.wikipedia.org/wiki/Lisp_(programming_language)http://en.wikipedia.org/wiki/Lisp_(programming_language)
  • 7/31/2019 MELJUN CORTES Functional Programming

    19/19

    Use in industryFunctional programming has long been popular in academia, but with few industrialapplications.[48]:page 11 However, recently several prominent functional programminglanguages have been used in commercial or industrial systems. For example,the Erlang programming language, which was developed bythe Swedish company Ericsson in the late 1980s, was originally used to implementfault-tolerant telecommunications systems.[8] It has since become popular for building

    a range of applications at companies such as T-Mobile,Nortel, Facebook and EDF.[7][9][49][50] The Schemedialect ofLisp was used as thebasis for several applications on early Apple Macintosh computers,[2][3] and has morerecently been applied to problems such as training simulationsoftware[4] and telescope control.[5]OCaml, which was introduced in the mid 1990s,has seen commercial use in areas such as financial analysis,[10] driver verification,industrial robot programming, and static analysis of embedded software.[11] Haskell,although initially intended as a research language,[13] has also been applied by a range

    of companies, in areas such as aerospace systems, hardware design, and webprogramming.[12][13]

    Other functional programming languages that have seen use in industryinclude Scala,[51]F#,[15][16]Lisp,[52] Standard ML,[53][54] and Clojure.

    http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Erlang_(programming_language)http://en.wikipedia.org/wiki/Swedenhttp://en.wikipedia.org/wiki/Erlang_(programming_language)http://en.wikipedia.org/wiki/Ericssonhttp://en.wikipedia.org/wiki/Swedenhttp://en.wikipedia.org/wiki/Ericssonhttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/T-Mobilehttp://en.wikipedia.org/wiki/T-Mobilehttp://en.wikipedia.org/wiki/Nortelhttp://en.wikipedia.org/wiki/Facebookhttp://en.wikipedia.org/wiki/EDFhttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Scheme_(programming_language)http://en.wikipedia.org/wiki/Lisp_(programming_language)http://en.wikipedia.org/wiki/T-Mobilehttp://en.wikipedia.org/wiki/T-Mobilehttp://en.wikipedia.org/wiki/Nortelhttp://en.wikipedia.org/wiki/Facebookhttp://en.wikipedia.org/wiki/EDFhttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Apple_Macintoshhttp://en.wikipedia.org/wiki/Apple_Macintoshhttp://en.wikipedia.org/wiki/Apple_Macintoshhttp://en.wikipedia.org/wiki/Lisp_(programming_language)http://en.wikipedia.org/wiki/Apple_Macintoshhttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/w/index.php?title=Software_simulation&action=edit&redlink=1http://en.wikipedia.org/w/index.php?title=Software_simulation&action=edit&redlink=1http://en.wikipedia.org/wiki/Telescopehttp://en.wikipedia.org/wiki/OCamlhttp://en.wikipedia.org/w/index.php?title=Software_simulation&action=edit&redlink=1http://en.wikipedia.org/w/index.php?title=Software_simulation&action=edit&redlink=1http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Telescopehttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/OCamlhttp://en.wikipedia.org/wiki/Software_driverhttp://en.wikipedia.org/wiki/Robothttp://en.wikipedia.org/wiki/Embedded_softwarehttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Embedded_softwarehttp://en.wikipedia.org/wiki/Embedded_softwarehttp://en.wikipedia.org/wiki/Embedded_softwarehttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Haskell_(programming_language)http://en.wikipedia.org/wiki/Robothttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Embedded_softwarehttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Haskell_(programming_language)http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Scala_(programming_language)http://en.wikipedia.org/wiki/F_Sharp_(programming_language)http://en.wikipedia.org/wiki/Lisp_(programming_language)http://en.wikipedia.org/wiki/Clojurehttp://en.wikipedia.org/wiki/Scala_(programming_language)http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/F_Sharp_(programming_language)http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Lisp_(programming_language)http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Clojurehttp://en.wikipedia.org/wiki/Clojurehttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Lisp_(programming_language)http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/F_Sharp_(programming_language)http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Scala_(programming_language)http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Haskell_(programming_language)http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Embedded_softwarehttp://en.wikipedia.org/wiki/Embedded_softwarehttp://en.wikipedia.org/wiki/Embedded_softwarehttp://en.wikipedia.org/wiki/Robothttp://en.wikipedia.org/wiki/Software_driverhttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/OCamlhttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Telescopehttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/w/index.php?title=Software_simulation&action=edit&redlink=1http://en.wikipedia.org/w/index.php?title=Software_simulation&action=edit&redlink=1http://en.wikipedia.org/w/index.php?title=Software_simulation&action=edit&redlink=1http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Apple_Macintoshhttp://en.wikipedia.org/wiki/Apple_Macintoshhttp://en.wikipedia.org/wiki/Apple_Macintoshhttp://en.wikipedia.org/wiki/Lisp_(programming_language)http://en.wikipedia.org/wiki/Scheme_(programming_language)http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/EDFhttp://en.wikipedia.org/wiki/Facebookhttp://en.wikipedia.org/wiki/Nortelhttp://en.wikipedia.org/wiki/T-Mobilehttp://en.wikipedia.org/wiki/T-Mobilehttp://en.wikipedia.org/wiki/T-Mobilehttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Ericssonhttp://en.wikipedia.org/wiki/Swedenhttp://en.wikipedia.org/wiki/Erlang_(programming_language)http://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Functional_programming