List of Indian inventions and discoveries: Difference between revisions

From formulasearchengine
Jump to navigation Jump to search
en>Wikiuser13
Added {{more footnotes}} tag to article (TW)
Line 1: Line 1:
'''Total functional programming''' (also known as '''strong functional programming''',<ref>This term is due to: {{Citation|last1=Turner|first1=D.A.|author-link=David Turner (computer scientist)|contribution=Elementary Strong Functional Programming|title=First International Symposium on Functional Programming Languages in Education|date=December 1995|journal=Springer LNCS|volume=1022|pages=1–13}}.</ref> to be contrasted with ordinary, or ''weak'' [[functional programming]]) is a [[computer programming|programming]] paradigm that restricts the range of programs to those that are [[Machine that always halts|provably terminating]].<ref name="TFP">{{Citation|last=Turner|first=D.A.|author-link=David Turner (computer scientist)|title=Total Functional Programming|journal=Journal of Universal Computer Science|volume=10|date=2004-07-28|pages=751–768|url=http://www.jucs.org/jucs_10_7/total_functional_programming|doi=10.3217/jucs-010-07-0751|issue=7}}</ref>
Alyson is what my husband loves to contact me but I don't like when individuals use my full title. My wife and I reside in Kentucky. What me and my family members love is performing ballet but I've been taking on new things lately. He is an order clerk and it's something he really enjoy.<br><br>Here is my weblog - psychic readings - [http://www.edmposts.com/build-a-beautiful-organic-garden-using-these-ideas/ www.edmposts.com] -
 
Termination is guaranteed by the following restrictions:
 
# A restricted form of [[recursion]], which operates only upon ‘reduced’ forms of its arguments, such as [[Walther recursion]], substructural recursion, or "strongly normalizing" as proven by abstract interpretation of code.<ref name="ETinESFP">{{Citation|last=Turner|first=D.A.|author-link=David Turner (computer scientist)|title=Ensuring Termination in ESFP|journal=Journal of Universal Computer Science|volume=6|date=2000-04-28|pages=474–488|url=http://www.jucs.org/jucs_6_4/ensuring_termination_in_esfp|doi=10.3217/jucs-006-04-0474|issue=4}}</ref>
# Every function must be a total (as opposed to [[partial function|partial]]) function.  That is, it must have a definition for everything inside its domain.
#* There are several possible ways to extend commonly used partial functions such as division to be total: choosing an arbitrary result for inputs on which the function is normally undefined (such as <math>\forall x \in \mathbb{N}. x \div 0 = 0</math> for division); adding another argument to specify the result for those inputs; or excluding them by use of type system features such as [[refinement type]]s.<ref name="TFP"/>
 
These restrictions mean that total functional programming is not [[Turing-complete]]. However, the set of algorithms that can be used is still huge. For example, any algorithm for which an [[Upper bound|asymptotic upper bound]] can be calculated (by a program that itself only uses Walther recursion) can be trivially transformed into a provably-terminating function by using the upper bound as an extra argument decremented on each iteration or recursion.
 
For example, [[quicksort]] is not trivially shown to be substructural recursive, but it only recurses to a maximum depth of the length of the vector (in the worst-case O(n^2) case). A quicksort implementation on lists (which would be rejected by a substructural recursive checker) is:
<code>
qsort []      = []
qsort [a]      = [a]
qsort (a:as)  = let
                    (lesser, greater) = partition a as
                  in qsort lesser ++ [a] ++ qsort greater
</code>
To make it substructural recursive using the length of the vector as a limit, we could do:
<code>
qsort x = qsortSub x x
-- minimum case
qsortSub []    as    = as -- shows termination
-- standard qsort cases
qsortSub (l:ls) []    = [] -- nonrecursive, so accepted
qsortSub (l:ls) [a]    = [a] -- nonrecursive, so accepted
qsortSub (l:ls) (a:as) = let
                            (lesser, greater) = partition a as
                            -- recursive, but recurses on ls, which is a substructure of
                            -- its first input.
                          in qsortSub ls lesser ++ [a] ++ qsortSub ls greater
</code>
Some classes of algorithms that have no theoretical upper bound but have a practical upper bound (for example, some heuristic-based algorithms) can be programmed to "give up" after so many recursions, also ensuring termination.
 
Another outcome of total functional programming is that both [[strict evaluation]] and [[lazy evaluation]] result in the same behaviour, in principle; however, one or the other may still be preferable (or even required) for performance reasons.<ref>The differences between lazy and eager evaluation are discussed in: {{cite book|last=Granström|first=J. G.|title=Treatise on Intuitionistic Type Theory|series=Logic, Epistemology, and the Unity of Science|volume=7|year=2011|url=http://www.springer.com/philosophy/book/978-94-007-1735-0|isbn=978-94-007-1735-0}} See in particular pp. 86-91.</ref>
 
In total functional programming, a distinction is made between [[data]] and [[codata]]—the former is [[finitary]], while the latter is potentially infinite. Such potentially infinite data structures are used for applications such as [[I/O]]. Using codata entails the usage of such operations as [[corecursion]]. However, it is possible to do [[I/O]] in a total functional programming language (with [[dependent types]]) also without codata.<ref>{{Citation|last=Granström|first=J. G.|title=A New Paradigm for Component-based Development|journal=Journal of Software|volume=7|date=May 2012|pages= 1136–1148 |url=http://ojs.academypublisher.com/index.php/jsw/article/view/jsw070511361148|doi=10.4304/jsw.7.5.1136-1148|issue=5}}</ref>
 
Both [[Epigram (programming language)|Epigram]] and [[Charity (programming language)|Charity]] could be considered total functional programming languages, even though they don't work in the way Turner specifies in his paper. So could programming directly in plain [[System F]], in [[Martin-Löf type theory]] or the [[Calculus of Constructions]].
 
==References==
<references/>
 
{{DEFAULTSORT:Total Functional Programming}}
[[Category:Programming paradigms]]
[[Category:Functional programming]]
[[Category:Proof assistants]]

Revision as of 10:34, 20 February 2014

Alyson is what my husband loves to contact me but I don't like when individuals use my full title. My wife and I reside in Kentucky. What me and my family members love is performing ballet but I've been taking on new things lately. He is an order clerk and it's something he really enjoy.

Here is my weblog - psychic readings - www.edmposts.com -