Abstract:
Miranda [Tur85], offer an attractive alternative to conventional imperative ones [Bac78], [Tur81]. In a functional language, executing a program corresponds to computing the value of an expression. In contrast to imperative languages, there are no notions of statements or updatable variables (i.e. in the sense of names for storage locations); thus, no side-effects are possible. Further, there is a much more general notion of a value: apart from integers, booleans, etc, a value can also be a large data structure (even e.g. an infinite list or tree, if lazy evaluation is used; see below), or a function. Among the most often cited advantages of functional languages are: ffl Simple and clean semantics. Functional programming languages, coming from the mathematical tradition of the-calculus [Chu41] and combinatory logic [CF58], have simple and clean semantics. The notion of referential transparency, whereby in an expression a sub-expression can always be replaced by any other equal in value, is of particular importance for e.g. correctness proofs and program transformations. ffl Expressive power and succinctness. Functional programs are typically 2--10 times shorter than conventional imperative ones; the factor varies depending on the actual
Citations
|
1064
|
A Structural Approach to Operational Semantics
– Plotkin
- 1981
|
|
369
|
Programming Be Liberated from von Neumann Style? A Functional Style and its Algebra of Programs
– Backus
- 1978
|
|
259
|
The Calculi of Lambda-Conversion
– Church
- 1941
|
|
257
|
The mechanical evaluation of expressions
– Landin
- 1964
|
|
170
|
A new implementation technique for applicative languages
– Turner
- 1979
|
|
117
|
The categorical abstract machine
– Cousineau, Curien, et al.
- 1985
|
|
108
|
Efficient compilation of lazy evaluation
– Johnsson
- 1984
|
|
97
|
Recursive Programming Techniques
– Burge
- 1975
|
|
96
|
Semantics and Pragmatics of the Lambda Calculus
– Wadsworth
- 1971
|
|
58
|
A lazy evaluator
– Henderson, Jr
- 1976
|
|
55
|
Über die Bausteine der mathematischen Logik. Mathematische Annalen, 92, 305–316. English translation, ‘On the building blocks of mathematical logic’ in van Heijenoort
– Schönfinkel
- 1924
|
|
54
|
An experimental applicative language
– Hope
- 1980
|
|
33
|
The semantic elegance of applicative languages
– Turner
- 1981
|
|
25
|
The Implementation of Functional Languages using Custom Hardware
– Stoye
- 1985
|
|
24
|
ALICE: A multi-processor reduction machine for the parallel evaluation of applicative languages
– Darlington, Reeve
- 1981
|
|
13
|
combinators: A new implementation method for applicative languages
– Super
- 1982
|
|
12
|
A dataflow architecture with tagged tokens
– Arvind, Pingali
- 1980
|
|
9
|
Code Generation Techniques for Functional Languages
– Fairbairn, Wray
- 1986
|
|
9
|
The G-machine: a fast, graph-reduction evaluator
– Kieburtz
- 1985
|
|
9
|
NORMA: a graph reduction processor
– Scheevel
- 1986
|
|
8
|
a non-strict language with polymorphic types
– Miranda
- 1985
|
|
7
|
Standard ML Proposal. Polymorphism: The ML/LCF/Hope Newsletter
– Milner
- 1984
|
|
5
|
A combinator-based compiler for a functional language
– Hudak, Kranz
- 1984
|
|
3
|
GRIP: A Parallel Graph Reduction Machine
– Peyton-Jones, Clack, et al.
- 1985
|
|
2
|
The functional abstract machine. Polymorphism: The ML/LCF/Hope Newsletter
– Cardelli
- 1983
|
|
2
|
A fixed-program machine for combinator expression evaluation
– Jones, Muchnick
- 1982
|
|
1
|
A Translation of Combinator Graphs into Machinecode
– Augusteijn
- 1984
|
|
1
|
reduction machine
– Clarke, Gladstone, et al.
- 1980
|
|
1
|
COBWEB: a combinator reduction engine
– Shute, Osmon, et al.
- 1985
|
|
1
|
An implementation of SASL
– Turner
- 1975
|