Stochastic tunneling: Difference between revisions

From formulasearchengine
Jump to navigation Jump to search
en>Mark viking
Added a bit more explanation
en>Rjwilmsi
m →‎References: Added 1 dois to journal cites using AWB (10094)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
In [[computer science]], '''graph reduction''' implements an efficient version of non-strict evaluation, an [[evaluation strategy]] where the arguments to a function are not immediately evaluated. This form of non-strict evaluation is also known as [[lazy evaluation]] and used in [[functional programming|functional programming languages]]. The technique was first developed by [[Chris Wadsworth]] in 1971.
Eusebio Stanfill is what's indicated on my birth qualification although it is not necessarily quite the name on private birth certificate. Vermont can be where my home can. Software progressing has been my afternoon job for a while. To prepare is the only hobby my wife doesn't approve of. You can seek out my website here: http://prometeu.net<br><br>Stop by my web blog; [http://prometeu.net clash Of clans hack download free]
 
== Motivation ==
A simple example of evaluating an arithmetic expression follows:
 
:<math>
\begin{align}
& {} \qquad ((2+2)+(2+2))+(3+3) \\
& {} =((2+2)+(2+2))+ 6 \\
& {} =((2+2)+ 4)+6 \\
& {} =(4+4)+6 \\
& {} =8+6 \\
& {} =14
\end{align}
</math>
 
The above reduction sequence employs a strategy known as [[outermost tree reduction]]. The same expression can be evaluated using [[innermost tree reduction]], yielding the reduction sequence:
 
:<math>
\begin{align}
& {} \qquad ((2+2)+(2+2))+(3+3) \\
& {} = ((2+2)+4)+(3+3) \\
& {} = (4+4)+(3+3) \\
& {} = (4+4)+6 \\
& {} = 8+6 \\
& {} = 14
\end{align}
</math>
 
Notice that the reduction order is made explicit by the addition of parentheses. This expression could also have been simply evaluated right to left, because addition is an [[associative]] operation.
 
Represented as a [[Tree data structure|tree]], the expression above looks like this:
 
[[Image:Expression Tree.svg|300px]]
 
This is where the term tree reduction comes from.  When represented as a tree, we can think of innermost reduction as working from the bottom up, while outermost works from the top down.
 
The expression can also be represented as a [[graph (data structure)|graph]], allowing sub-expressions to be shared:
 
[[Image:Expression Graph.svg|300px]]
 
As for trees, outermost and innermost reduction also applies to graphs.  Hence we have '''graph reduction'''.
 
Now evaluation with outermost graph reduction can proceed as follows:
 
[[Image:Expression Graph Reduction.svg|200px]]
 
Notice that evaluation now only requires four steps. Outermost graph reduction is referred to as [[lazy evaluation]] and innermost graph reduction is referred to as [[eager evaluation]].
 
== Combinator graph reduction ==
'''Combinator graph reduction''' is a fundamental implementation technique for [[functional programming]] languages, in which a program is converted into a [[combinator]] representation which is mapped to a [[directed graph]] [[data structure]] in computer memory, and program execution then consists of rewriting parts of this graph ("reducing" it) so as to move towards useful results.
 
== History ==
The concept of a graph reduction that allows evaluated values to be shared was first developed by [[Chris Wadsworth]] in his 1971 Ph.D. dissertation.<ref>{{cite journal | last = Hudak | first = Paul | title = Conception, evolution, and application of functional programming languages | journal = [[Association for Computing Machinery|ACM]] Computing Surveys | volume = 21 | issue = 3 | pages = 359–411 |date=September 1989 | id = {{citeseerx|10.1.1.83.6505}} | doi =10.1145/72551.72554 }}</ref> This dissertation was cited by Peter Henderson and James H. Morris Jr. in 1976 page, “A lazy evaluator” [http://portal.acm.org/citation.cfm?id=811543] that introduced the notion of lazy evaluation. In 1976 David Turner incorporated lazy evaluation into [[SASL programming language|SASL]] using combinators.<ref>{{cite conference |last=Hudak |first=Paul |coauthors=Hughes, John; Peyton Jones, Simon; Wadler, Philip |title=A History of Haskell |url =http://haskell.org/haskellwiki/History_of_Haskell |booktitle=History of Programming Languages Conference 2007 }}</ref>
SASL was an early functional programming language first developed by Turner in 1972.
 
==See also==
*[[SECD machine]]
*[[graph reduction machine]]
 
==Notes==
<references/>
 
==References==
*{{cite book
|title=Introduction to Functional Programming using Haskell
|last=Bird|first=Richard
|publisher=Prentice Hall
|year=1998
|isbn=0-13-484346-0
}}
 
==Further reading==
*[[Simon Peyton Jones]], ''The Implementation of Functional Programming Languages'', Prentice Hall, 1987.  Full text online.[http://research.microsoft.com/users/simonpj/papers/slpj-book-1987/index.htm]
 
[[Category:Implementation of functional programming languages]]
[[Category:Graph algorithms]]
[[Category:Graph rewriting]]

Latest revision as of 11:48, 4 May 2014

Eusebio Stanfill is what's indicated on my birth qualification although it is not necessarily quite the name on private birth certificate. Vermont can be where my home can. Software progressing has been my afternoon job for a while. To prepare is the only hobby my wife doesn't approve of. You can seek out my website here: http://prometeu.net

Stop by my web blog; clash Of clans hack download free