• Home
  • Agent Gallery
  • Templates
  • Chat with PDF
  • Literature Review
  • AI Writer
  • Find Topics
  • Paraphraser
  • Citation Generator
  • Extract Data
  • AI Detector
Scispace (Formerly Typeset)
  1. Home
  2. Journals
  3. Journal of Functional Programming
  4. 1997
  1. Home
  2. Journals
  3. Journal of Functional Programming
  4. 1997
Showing papers in "Journal of Functional Programming in 1997"
Journal Article•10.1017/S095679689700261X•
A foundation for actor computation

[...]

Gul Agha1, Ian A. Mason2, Scott F. Smith3, Carolyn L. Talcott4•
University of Illinois at Urbana–Champaign1, University of New England (Australia)2, Johns Hopkins University3, Stanford University4
01 Jan 1997-Journal of Functional Programming
TL;DR: An actor language is presented which is an extension of a simple functional language, and an operational semantics for this extension is provided, and it is shown that the three forms of equivalence, namely, convex, must, and may equivalences, collapse to two in the presence of fairness.
Abstract: We present an actor language which is an extension of a simple functional language, and provide an operational semantics for this extension. Actor configurations represent open distributed systems, by which we mean that the specification of an actor system explicitly takes into account the interface with external components. We study the composability of such systems. We define and study various notions of testing equivalence on actor expressions and configurations. The model we develop provides fairness. An important result is that the three forms of equivalence, namely, convex, must, and may equivalences, collapse to two in the presence of fairness. We further develop methods for proving laws of equivalence and provide example proofs to illustrate our methodology.

514 citations

Journal Article•10.1017/S0956796897002748•
Thunks and the λ-calculus

[...]

John Hatcliff1, Olivier Danvy2•
University of Copenhagen1, Aarhus University2
01 May 1997-Journal of Functional Programming
TL;DR: It is shown that T actually satisfies all of Plotkin's correctness criteria for Cn (i.e. his Indifference, Simulation and Translation theorems) and most of the correctness theorem can now be seen as simple corollaries of the corresponding theoresms for Cv and T.
Abstract: Thirty-five years ago, thunks were used to simulate call-by-name under call-by-value in Algol 60. Twenty years ago, Plotkin presented continuation-based simulations of call-by-name under call-by-value and vice versa in the λ-calculus. We connect all three of these classical simulations by factorizing the continuation-based call-by-name simulation Cn with a thunk-based call-by-name simulation T followed by the continuation-based call-by-value simulation Cv, extended to thunks.formula hereWe show that T actually satisfies all of Plotkin's correctness criteria for Cn (i.e. his Indifference, Simulation and Translation theorems). Furthermore, most of the correctness theorems for Cn can now be seen as simple corollaries of the corresponding theorems for Cv and T.

78 citations

Journal Article•10.1017/S0956796897002785•
Extending a λ-calculus with explicit substitution which preserves strong normalisation into a confluent calculus on open terms

[...]

Fairouz Kamareddine1, Alejandro Ríos1•
University of Glasgow1
01 Jul 1997-Journal of Functional Programming
TL;DR: In this paper, Kamareddine and Rios extended the λ-calculus with explicit substitutions by turning de Bruijn's metaoperators into object-operators offering a style of explicit substitution that differs from that of λσ.
Abstract: The last 15 years have seen an explosion in work on explicit substitution, most of which is done in the style of the λσ-calculus. In Kamareddine and Rios (1995a), we extended the λ-calculus with explicit substitutions by turning de Bruijn's meta-operators into object-operators offering a style of explicit substitution that differs from that of λσ. The resulting calculus, λs, remains as close as possible to the λ-calculus from an intuitive point of view and, while preserving strong normalisation (Kamareddine and Rios, 1995a), is extended in this paper to a confluent calculus on open terms: the λse-caculus. Since the establishment of these results, another calculus, λζ, came into being in Munoz Hurtado (1996) which preserves strong normalisation and is itself confluent on open terms. However, we believe that λse still deserves attention because, while offering a new style to work with explicit substitutions, it is able to simulate one step of classical β-reduction, whereas λζ is not. To prove confluence we introduce a generalisation of the interpretation method (cf. Hardin, 1989; Curien et al., 1992) to a technique which uses weak normal forms (instead of strong ones). We consider that this extended method is a useful tool to obtain confluence when strong normalisation of the subcalculus of substitutions is not available. In our case, strong normalisation of the corresponding subcalculus of substitutions se, is still a challenging open problem to the rewrite community, but its weak normalisation is established here via an effective strategy.

63 citations

Journal Article•10.1017/S0956796897002839•
Shrinking lambda expressions in linear time

[...]

Andrew W. Appel1, Trevor Jim2•
Princeton University1, University of Pennsylvania2
01 Sep 1997-Journal of Functional Programming
TL;DR: This work shows some efficient normalization algorithms that are immediately useful in optimizing compilers; and gives a confluence proof for the system, showing that the choice of normalization algorithm does not affect final code quality.
Abstract: Functional-language compilers often perform optimizations based on beta and delta reduction. To avoid speculative optimizations that can blow up the code size, we might wish to use only shrinking reduction rules guaranteed to make the program smaller: these include dead-variable elimination, constant folding, and a restricted beta rule that inlines only functions that are called just once. The restricted beta rule leads to a shrinking rewrite system that has not previously been studied. We show some efficient normalization algorithms that are immediately useful in optimizing compilers; and we give a confluence proof for our system, showing that the choice of normalization algorithm does not affect final code quality.

62 citations

Journal Article•10.1017/S095679689700289X•
Modularity of strong normalization in the algebraic-λ-cube

[...]

Franco Barbanera1, Maribel Fernández2, Herman Geuvers3•
University of Turin1, École Normale Supérieure2, Radboud University Nijmegen3
01 Nov 1997-Journal of Functional Programming
TL;DR: It is shown that strong normalization is a modular property of all the systems in the algebraic-λ-cube, provided that the first-order rewrite rules are non-duplicating and the higher-order rules satisfy the general schema of Jouannaud and Okada.
Abstract: In this paper we present the algebraic-λ-cube, an extension of Barendregt's λ-cube with first- and higher-order algebraic rewriting. We show that strong normalization is a modular property of all the systems in the algebraic-λ-cube, provided that the first-order rewrite rules are non-duplicating and the higher-order rules satisfy the general schema of Jouannaud and Okada. We also prove that local confluence is a modular property of all the systems in the algebraic-λ-cube, provided that the higher-order rules do not introduce critical pairs. This property and the strong normalization result imply the modularity of confluence.

53 citations

Journal Article•10.1017/S0956796897002761•
ML for the Working Programmer (2nd edition) by L. C. Paulson, Cambridge University Press, 1996.

[...]

Chris Reade1•
Brunel University London1
01 Jul 1997-Journal of Functional Programming

36 citations

Journal Article•10.1017/S0956796897002803•
Functional pearl

[...]

Richard Bird1•
University of Oxford1
01 Jul 1997-Journal of Functional Programming
TL;DR: A common solution to the problem of handling list indexing efficiently in a functional program is to build a binary tree, which has the given list as frontier and is of minimum height.
Abstract: A common solution to the problem of handling list indexing efficiently in a functional program is to build a binary tree. The tree has the given list as frontier and is of minimum height. Each internal node of the tree stores size information (actually, the size of its left subtree) to direct the search for an element at a given position in the frontier. One application was considered in my previous pearl (Bird, 1997). There are two complementary methods for building such a tree, both of which can be implemented in linear time. One method is ‘recursive’, or top down, and works by splitting the list into two equal halves, recursively building a tree for each half, and then combining the two results. The other method is ‘iterative’, or bottom up, and works by first creating a list of singleton trees, and then repeatedly combining the trees in pairs until just one tree remains. The two methods lead to different trees, but in each case the result is a tree with smallest possible height.

36 citations

Journal Article•10.1017/S0956796897002700•
Type and behaviour reconstruction for higher-order concurrent programs

[...]

Torben Amtoft1, Flemming Nielson1, Hanne Riis Nielson1•
Aarhus University1
01 May 1997-Journal of Functional Programming
TL;DR: The development of the present paper improves a previously published algorithm in achieving completeness as well as soundness; this is due to an alternative strategy for generalising over types and behaviours.
Abstract: In this paper we develop a sound and complete type and behaviour inference algorithm for a fragment of CML (Standard ML with primitives for concurrency). Behaviours resemble terms of a process algebra and yield a concise representation of the communications taking place during execution; types are mostly as usual except that function ypes and ‘delayed communication types’ are labelled by behaviours expressing the communications that will take place if the function is applied or the delayed action is activated. The development of the present paper improves a previously published algorithm in achieving completeness as well as soundness; this is due to an alternative strategy for generalising over types and behaviours.

26 citations

Journal Article•10.1017/S0956796897002645•
Leftmost outside-in narrowing calculi

[...]

Tetsuo Ida1, Koichi Nakahara2•
University of Tsukuba1, Canon Inc.2
01 Mar 1997-Journal of Functional Programming
TL;DR: A narrowing calculus OINC is given that generates the leftmost outside-in narrowing derivations, and it is shown that s-OINC enjoys the same completeness property as OINC.
Abstract: We present narrowing calculi that are computation models of functional-logic programming languages. The narrowing calculi are based on the notion of the leftmost outside-in reduction of Huet and Levy. We note the correspondence between the narrowing and reduction derivations, and define the leftmost outside-in narrowing derivation. We then give a narrowing calculus OINC that generates the leftmost outside-in narrowing derivations. It consists of several inference rules that perform the leftmost outside-in narrowing. We prove the completeness of OINC using an ordering defined over a narrowing derivation space. To use the calculus OINC as a model of computation of functional-logic programming, we extend OINC to incorporate strict equality. The extension results in a new narrowing calculus, s-OINC. We show also that s-OINC enjoys the same completeness property as OINC.

24 citations

Journal Article•10.1017/S0956796897002852•
A new method for functional arrays

[...]

Melissa E. O'Neill1, F. Warren Burton1•
Simon Fraser University1
01 Sep 1997-Journal of Functional Programming
TL;DR: The technique provides arrays as a true functional analogue of imperative arrays with the properties that functional programmers have come to expect from their data structures.
Abstract: Arrays are probably the most widely used data structure in imperative programming languages, yet functional languages typically only support arrays in a limited manner, or prohibit them entirely. This is not too surprising, since most other mutable data structures, such as trees, have elegant immutable analogues in the functional world, whereas arrays do not. Previous attempts at addressing the problem have suffered from one of three weaknesses, either that they don't support arrays as a persistent data structure (unlike the functional analogues of other imperative data structures), or that the range of operations is too restrictive to support some common array algorithms efficiently, or that they have performance problems. Our technique provides arrays as a true functional analogue of imperative arrays with the properties that functional programmers have come to expect from their data structures. To efficiently support array algorithms from the imperative world, we provide O(1) operations for single-threaded array use. Fully persistent array use can also be provided at O(1) amortized cost, provided that the algorithm satisfies a simple requirement as to uniformity of access. For those algorithms which do not access the array uniformly or single-threadedly, array reads or updates take at most O(log n) amortized time, where n is the size of the array. Experimental results indicate that the overheads of our technique are acceptable in practice for many applications.

24 citations

Journal Article•10.1017/S0956796897002621•
On the effectiveness of functional language features: NAS benchmark FT

[...]

J. Hammes1, Sumit Sur1, W. Böhm1•
Colorado State University1
01 Jan 1997-Journal of Functional Programming
TL;DR: This paper investigates the effectiveness of functional language features when writing scientific codes, and compares first order and higher order implementations of the NAS FT benchmark, a three-dimensional heat equation solver.
Abstract: In this paper we investigate the effectiveness of functional language features when writing scientific codes. Our programs are written in the purely functional subset of Id and executed on a one node Motorola Monsoon machine, and in Haskell and executed on a Sparc 2. In the application we study – the NAS FT benchmark, a three-dimensional heat equation solver – it is necessary to target and select one-dimensional sub-arrays in three-dimensional arrays. Furthermore, it is important to be able to share computation in array definitions. We compare first order and higher order implementations of this benchmark. The higher order version uses functions to select one-dimensional sub-arrays, or slices, from a three-dimensional object, whereas the first order version creates copies to achieve the same result. We compare various representations of a three-dimensional object, and study the effect of strictness in Haskell. We also study the performance of our codes when employing recursive and iterative implementations of the one-dimensional FFT, which forms the kernel of this benchmark. It turns out that these languages still have quite inefficient implementations, with respect to both space and time. For the largest problem we could run (323), Haskell is 15 times slower than Fortran and uses three times more space than is absolutely necessary, whereas Id on Monsoon uses nine times more cycles than Fortran on the MIPS R3000, and uses five times more space than is absolutely necessary. This code, and others like it, should inspire compiler writers to improve the performance of functional language implementations.
Journal Article•10.1017/S0956796897212682•
Book review: Garbage Collection: Algorithms for Automatic Dynamic Memory Management by Richard Jones and Rafael Lins, John Wiley & Sons, 1996.

[...]

Andrew W. Appel1•
Princeton University1
01 Mar 1997-Journal of Functional Programming
Journal Article•10.1017/S0956796897002657•
NATURAL EXPERT: a commercial functional programming environment

[...]

Nigel W. O. Hutchison1, Ute Neuhaus1, Manfred Schmidt-Schauss2, Cordy V. Hall3•
Software AG1, Goethe University Frankfurt2, University of Glasgow3
01 Mar 1997-Journal of Functional Programming
TL;DR: NATURAL EXPERT is a product that allows users to build knowledge-based systems that uses a lazy functional language, NATURal EXPERT LANGUAGE, to implement backward chaining and provide a reliable knowledge processing environment in which development can take place.
Abstract: NATURAL EXPERT is a product that allows users to build knowledge-based systems. It uses a lazy functional language, NATURAL EXPERT LANGUAGE, to implement backward chaining and provide a reliable knowledge processing environment in which development can take place. Customers from all over the world buy the system and have used it to handle a variety of problems, including applications such as airplane servicing and bank loan assessment. Some of these are used 10,000 times or more per month.
Journal Article•10.1017/S0956796897002840•
A functional description of T E X's formula layout

[...]

Reinhold Heckmann1, Reinhard Wilhelm1•
Saarland University1
01 Sep 1997-Journal of Functional Programming
TL;DR: In this article, a re-implementation of TEX's formula layout algorithm in the functional language SML is presented, which provides a more readable description of the algorithm, extracted from the monolithical TEX system.
Abstract: While the quality of the results of TEX's mathematical formula layout algorithm is convincing, its original description is hard to understand since it is presented as an imperative program with complex control flow and destructive manipulations of the data structures representing formulae. In this paper, we present a re-implementation of TEX's formula layout algorithm in the functional language SML, thereby providing a more readable description of the algorithm, extracted from the monolithical TEX system.
Journal Article•10.1017/S0956796897002694•
EDITORIAL: A HOT opportunity

[...]

Philip Wadler
01 Mar 1997-Journal of Functional Programming
TL;DR: The Java phenomenon means that programmers that once laughed at garbage collection and strong typing have started to use it daily, and this opens up a wonderful opportunity for the functional programming community.
Abstract: The Java phenomenon means that programmers that once laughed at garbage collection and strong typing have started to use it daily, and this opens up a wonderful opportunity for the functional programming community.Bob Harper coined the acronym HOT to summarise much of what functional programmers have to offer the world: expertise in languages that are Higher-Order and Typed. Bob argued for a broad interpretation of these terms, so that Higher-Order includes languages where objects contain methods (even though functions are not first-class citizens), and Typed includes both static and dynamic typing. By these criteria Java is HOT, and so are Haskell, ML and Scheme.
Journal Article•10.1017/S0956796897002670•
FUNCTIONAL PEARL: Lazy wheel sieves and spirals of primes

[...]

Colin Runciman1•
University of York1
01 Mar 1997-Journal of Functional Programming
TL;DR: Functional variants of the wheel sieve that enumerate all primes as a lazy list are described.
Abstract: The popular method of enumerating the primes is the Sieve of Eratosthenes. It can be programmed very neatly in a lazy functional language, but runs rather slowly. A little-known alternative method is the Wheel Sieve, originally formulated as a fast imperative algorithm for obtaining all primes up to a given limit, assuming destructive access to a bit-array. This article describes functional variants of the wheel sieve that enumerate all primes as a lazy list.
Journal Article•10.1017/s0956796897002803•
FUNCTIONAL PEARL On building trees with minimum height

[...]

R. Bird
01 Jul 1997-Journal of Functional Programming
TL;DR: Building a binary tree with minimum height from a list is a common solution in functional programming. Two complementary methods exist for constructing such a tree in linear time.
Abstract: A common solution to the problem of handling list indexing efficiently in a functional program is to build a binary tree. The tree has the given list as frontier and is of minimum height. Each internal node of the tree stores size information (actually, the size of its left subtree) to direct the search for an element at a given position in the frontier. One application was considered in my previous pearl (Bird, 1997). There are two complementary methods for building such a tree, both of which can be implemented in linear time. One method is ‘recursive’, or top down, and works by splitting the list into two equal halves, recursively building a tree for each half, and then combining the two results. The other method is ‘iterative’, or bottom up, and works by first creating a list of singleton trees, and then repeatedly combining the trees in pairs until just one tree remains. The two methods lead to different trees, but in each case the result is a tree with smallest possible height.
Journal Article•10.1017/S0956796897002797•
A syntactic method for finding least fixed points of higher-order functions over finite domains

[...]

Tyng-Ruey Chuang1, Benjamin Goldberg2•
Academia Sinica1, Courant Institute of Mathematical Sciences2
01 Jul 1997-Journal of Functional Programming
TL;DR: The proposed syntactic method is based on an augmented simply typed lambda calculus where the symbolic representation of each function produced in the fixed point iteration is transformed to a syntactic normal form, and the strictness property of an expression can be easily calculated from those of its sub-expressions.
Abstract: This paper describes a method for finding the least fixed points of higher-order functions over finite domains using symbolic manipulation. Fixed point finding is an essential component in the calculation of abstract semantics of functional programs, providing the foundation for program analyses based on abstract interpretation. Previous methods for fixed point finding have primarily used semantic approaches, which often must traverse large portions of the semantic domain even for simple programs. This paper provides the theoretical framework for a syntax-based analysis that is potentially very fast. The proposed syntactic method is based on an augmented simply typed lambda calculus where the symbolic representation of each function produced in the fixed point iteration is transformed to a syntactic normal form. Normal forms resulting from successive iterations are then compared syntactically to determine their ordering in the semantic domain, and to decide whether a fixed point has been reached. We show the method to be sound, complete and compositional. Examples are presented to show how this method can be used to perform strictness analysis for higher-order functions over non-flat domains. Our method is compositional in the sense that the strictness property of an expression can be easily calculated from those of its sub-expressions. This is contrary to most strictness analysers, where the strictness property of an expression has to be computed anew whenever one of its subexpressions changes. We also compare our approach with recent developments in strictness analysis.
Journal Article•10.1017/S0956796897002736•
FUNCTIONAL PEARL: On merging and selection

[...]

Richard Bird1•
University of Oxford1
01 May 1997-Journal of Functional Programming
TL;DR: Can the authors find a faster solution if xs and ys are each represented by balanced binary search trees, then the computation can be reduced to O(log p+log q) steps?
Abstract: Given two ascending lists xs and ys of combined length greater than n, consider the computation offormula hereThe standard function merge merges two ascending sequences and (!!) denotes list indexing. With a lazy evaluator the computation takes O(n) steps; with an eager one it takes O(p+q) steps, where p=length xs and q=length ys. Now in functional programming it is more efficient to index a tree than a list, so the question arises: can we find a faster solution if xs and ys are each represented by a tree? Somewhat surprisingly the answer is yes: if xs and ys are each represented by balanced binary search trees, then the computation can be reduced to O(log p+log q) steps. This is despite the fact that there is no known method for merging two binary search trees in better than linear time. The details, presented below, depend on a subtle relationship between merging and indexing.
Journal Article•10.1017/S0956796897002918•
Foundations for Programming Languages by John C. Mitchell, MIT Press, 1996.

[...]

R. D. Tennent
01 Nov 1997-Journal of Functional Programming
Journal Article•10.1017/S095679689700275X•
A competitive algorithm for managing sharing in the distributed execution of functional programs

[...]

Gad Aharoni1, Amnon Barak1, Amir Ronen1•
Hebrew University of Jerusalem1
01 Jul 1997-Journal of Functional Programming
TL;DR: This paper presents an on-line (run-time) algorithm that decides which of the expressions that are shared between several PEs should be evaluated only once, and which expressions should be evaluation locally by each sharing PE.
Abstract: Execution of functional programs on distributed-memory multiprocessors gives rise to the problem of evaluating expressions that are shared between several Processing Elements (PEs). One of the main difficulties of solving this problem is that, for a given shared expression, it is not known in advance whether realizing the sharing is more cost effective than duplicating its evaluation. Realizing the sharing requires coordination between the sharing PEs to ensure that the shared expression is evaluated only once. This coordination involves relatively high communication costs, and is therefore only worthwhile when the shared expressions require much computation time to evaluate. In contrast, when the shared expression is not computation intensive, it is more cost effective to duplicate the evaluation, and thus avoid the communication overhead costs. This dilemma of deciding whether to duplicate the work or to realize the sharing stems from the unknown computation time that is required to evaluate a shared expression. This computation time is difficult to estimate due to unknown run-time evolution of loops and recursion that may be part of the expression. This paper presents an on-line (run-time) algorithm that decides which of the expressions that are shared between several PEs should be evaluated only once, and which expressions should be evaluated locally by each sharing PE. By applying competitive considerations, the algorithm manages to exploit sharing of computation-intensive expressions, while it duplicates the evaluation of expressions that require little time to compute. The algorithm accomplishes this goal even though it has no a priori knowledge of the amount of computation that is required to evaluate the shared expression. We show that this algorithm is competitive with a hypothetical optimal off-line algorithm, which does have such knowledge, and we prove that the algorithm is deadlock free. Furthermore, this algorithm does not require any programmer intervention, it has low overhead, and it is designed to run on a wide variety of distributed systems.
Journal Article•10.1017/S0956796897002888•
On combinatory complete sets of proper combinators

[...]

Sabine Broda1, Luís Damas1•
University of Porto1
01 Nov 1997-Journal of Functional Programming
TL;DR: In this paper the decision problem of combinatory completeness for finite sets of proper combinators is studied for three subsystems of the pure lambda calculus and Precise characterizations of Proper combinator bases for the linear and the affine λ-calculus are given.
Abstract: A combinatory system (or equivalently the set of its basic combinators) is called combinatorially complete for a functional system, if any member of the latter can be defined by an entity of the former system. In this paper the decision problem of combinatory completeness for finite sets of proper combinators is studied for three subsystems of the pure lambda calculus. Precise characterizations of proper combinator bases for the linear and the affine λ-calculus are given, and the respective decision problems are shown to be decidable. Furthermore, it is determined which extensions with proper combinators of bases for the linear λ-calculus are combinatorially complete for the λI-calculus.
Journal Article•10.1017/s0956796897002785•
Extending a λ-calculus with explicit substitution which preserves strong normalisation into a confluent calculus on open terms

[...]

F. Kamareddine, Alejandro Ríos
01 Jul 1997-Journal of Functional Programming
TL;DR: It is considered that this extended method is a useful tool to obtain confluence when strong normalisation of the subcalculus of substitutions is not available, and a generalisation of the interpretation method to a technique which uses weak normal forms (instead of strong ones).
Abstract: The last 15 years have seen an explosion in work on explicit substitution, most of which is done in the style of the λσ-calculus. In Kamareddine and Ríos (1995a), we extended the λ-calculus with explicit substitutions by turning de Bruijn's meta-operators into object-operators offering a style of explicit substitution that differs from that of λσ. The resulting calculus, λs, remains as close as possible to the λ-calculus from an intuitive point of view and, while preserving strong normalisation (Kamareddine and Ríos, 1995a), is extended in this paper to a confluent calculus on open terms: the λse-caculus. Since the establishment of these results, another calculus, λζ, came into being in Muñoz Hurtado (1996) which preserves strong normalisation and is itself confluent on open terms. However, we believe that λse still deserves attention because, while offering a new style to work with explicit substitutions, it is able to simulate one step of classical β-reduction, whereas λζ is not. To prove confluence we introduce a generalisation of the interpretation method (cf. Hardin, 1989; Curien et al., 1992) to a technique which uses weak normal forms (instead of strong ones). We consider that this extended method is a useful tool to obtain confluence when strong normalisation of the subcalculus of substitutions is not available. In our case, strong normalisation of the corresponding subcalculus of substitutions se, is still a challenging open problem to the rewrite community, but its weak normalisation is established here via an effective strategy.
Journal Article•10.1017/S0956796897002633•
Higher-order functional languages and intensional logic

[...]

Panos Rondogiannis1, William W. Wadge1•
University of Victoria1
01 Jan 1997-Journal of Functional Programming
TL;DR: A broad class of higher-order functional programs can be transformed into semantically equivalent multidimensional intensional programs that contain only nullary variable definitions, and the proposed algorithm systematically eliminates user-defined functions from the source program by appropriately introducing context manipulation operators.
Abstract: In this paper we demonstrate that a broad class of higher-order functional programs can be transformed into semantically equivalent multidimensional intensional programs that contain only nullary variable definitions. The proposed algorithm systematically eliminates user-defined functions from the source program, by appropriately introducing context manipulation (i.e. intensional) operators. The transformation takes place in M steps, where M is the order of the initial functional program. During each step the order of the program is reduced by one, and the final outcome of the algorithm is an M-dimensional intensional program of order zero. As the resulting intensional code can be executed in a purely tagged-dataflow way, the proposed approach offers a promising new technique for the implementation of higher-order functional languages.
Journal Article•10.1017/S0956796897002712•
Deriving a lazy abstract machine

[...]

Peter Sestoft
01 May 1997-Journal of Functional Programming
TL;DR: The machine derived is a lazy version of Krivine's abstract machine, which was originally designed for call-by-name evaluation, and is extended with datatype constructors and base values, so the final machine implements all dynamic aspects of a lazy functional language.
Abstract: We derive a simple abstract machine for lazy evaluation of the lambda calculus, starting from Launchbury's natural semantics. Lazy evaluation here means non-strict evaluation with sharing of argument evaluation, i.e. call-by-need. The machine we derive is a lazy version of Krivine's abstract machine, which was originally designed for call-by-name evaluation. We extend it with datatype constructors and base values, so the final machine implements all dynamic aspects of a lazy functional language.
Journal Article•10.1017/S0956796897002906•
Trust in the λ-calculus

[...]

P. Ørbæk1, Jens Palsberg1•
National Research Foundation of South Africa1
01 Nov 1997-Journal of Functional Programming
TL;DR: The trust analysis presented in this paper is developed to help the programmer ensure that the requisite checks are always made on all data paths from input to output.
Abstract: This paper introduces trust analysis for higher-order languages. Trust analysis encourages the programmer to make explicit the trustworthiness of data, and in return it can guarantee that no mistakes with respect to trust will be made at run-time. We present a confluent λ-calculus with explicit trust operations, and we equip it with a trust-type system which has the subject reduction property. Trust information is presented as annotations of the underlying Curry types, and type inference is computable in O(n3) time.
Journal Article•10.1017/S0956796897002669•
E QUALS – a fast parallel implementation of a lazy language

[...]

Owen Kaser1, C. R. Ramakrishnan2, I. V. Ramakrishnan2, R. C. Sekar3•
University of New Brunswick1, Stony Brook University2, Iowa State University3
01 Mar 1997-Journal of Functional Programming
TL;DR: The EQUALS implementation indicates the effectiveness of NF-demand propagation in identifying significant parallelism and in achieving good sequential as well as parallel performance, and reference counting for memory management leads to very good scalability and low memory requirements.
Abstract: This paper describes EQUALS, a fast parallel implementation of a lazy functional language on a commercially available shared-memory parallel machine, the Sequent Symmetry. In contrast to previous implementations, we propagate normal form demand at compile time as well as run time, and detect parallelism automatically using strictness analysis. The EQUALS implementation indicates the effectiveness of NF-demand propagation in identifying significant parallelism and in achieving good sequential as well as parallel performance. Another important difference between EQUALS and previous implementations is the use of reference counting for memory management, instead of mark-and-sweep or copying garbage collection. Implementation results show that reference counting leads to very good scalability and low memory requirements, and offers sequential performance comparable to generational garbage collectors. We compare the performance of EQUALS with that of other parallel implementations (the 〈v, G〉-machine and GAML) as well as with the performance of SML/NJ, a sequential implementation of a strict language.
Journal Article•10.1017/S0956796897002827•
More haste, less speed: lazy versus eager evaluation

[...]

Richard Bird1, Geraint Jones1, Oege de Moor1•
University of Oxford1
01 Sep 1997-Journal of Functional Programming
TL;DR: It is shown how to solve the problem in linear time with a lazy functional program, which demonstrates that – for some problems at least – lazy evaluators are strictly more powerful than eager ones.
Abstract: Nicholas Pippenger has recently given a problem that, under two simple restrictions, can be solved in linear time by an impure Lisp program, but requires Ω(n log n) steps to be solved by any eager pure Lisp program. By showing how to solve the problem in linear time with a lazy functional program, we demonstrate that – for some problems at least – lazy evaluators are strictly more powerful than eager ones.
Journal Article•10.1017/S0956796897002724•
The call-by-need lambda calculus

[...]

Zena M. Ariola1, Matthias Felleisen2•
University of Oregon1, Rice University2
01 May 1997-Journal of Functional Programming
TL;DR: An equational characterization of the most popular lazy implementation technique – traditionally called ‘call-by-need’ – is developed and proved correct with respect to the original lambda calculus.
Abstract: Plotkin (1975) showed that the lambda calculus is a good model of the evaluation process for call-by-name functional programs. Reducing programs to constants or lambda abstractions according to the leftmost-outermost strategy exactly mirrors execution on an abstract machine like Landin's SECD machine. The machine-based evaluator returns a constant or the token closure if and only if the standard reduction sequence starting at the same program will end in the same constant or in some lambda abstraction. However, the calculus does not capture the sharing of the evaluation of arguments that lazy implementations use to speed up the execution. More precisely, a lazy implementation evaluates procedure arguments only when needed and then only once. All other references to the formal procedure parameter re-use the value of the first argument evaluation. The mismatch between the operational semantics of the lambda calculus and the actual behavior of the prototypical implementation is a major obstacle for compiler writers. Unlike implementors of the leftmost-outermost strategy or of a call-by-value language, implementors of lazy systems cannot easily explain the behavior of their evaluator in terms of source level syntax. Hence, they often cannot explain why a certain syntactic transformation ‘works’ and why another doesn't. In this paper we develop an equational characterization of the most popular lazy implementation technique – traditionally called ‘call-by-need’ – and prove it correct with respect to the original lambda calculus. The theory is a strictly smaller theory than Plotkin's call-by-name lambda calculus. Immediate applications of the theory concern the correctness proofs of a number of implementation strategies, e.g. the call-by-need continuation passing transformation and the realization of sharing via assignments. Some of this material first appeared in a paper presented at the 1995 ACM Conference on the Principles of Programming Languages. The paper was a joint effort with Maraist, Odersky and Wadler, who had independently developed a different equational characterization of call-by-need. We contrast our work with that of Maraist et al. in the body of this paper where appropriate.
Journal Article•10.1017/S0956796897002876•
Three algorithms on Braun trees

[...]

Chris Okasaki1•
Carnegie Mellon University1
01 Nov 1997-Journal of Functional Programming
TL;DR: This work gives an O(log2 n) algorithm for calculating the size of a tree, and describes an order-preserving algorithm for converting a list to a tree in O(n) time.
Abstract: Among the many flavours of balanced binary trees, Braun trees (Braun and Rem, 1983) are perhaps the most circumscribed. For any given node of a Braun tree, the left subtree is either exactly the same size as the right subtree, or one element larger. Braun trees always have minimum height, and the shape of each Braun tree is completely determined by its size. In return for this rigor, algorithms that manipulate Braun trees are often exceptionally simple and elegant, and need not maintain any explicit balance information.Braun trees have been used to implement both flexible arrays (Braun and Rem, 1983; Hoogerwoord, 1992; Paulson, 1996) and priority queues (Paulson, 1996; Bird, 1996). Most operations involving a single element (e.g. adding, removing, inspecting or updating an element) take O(log n) time, since the trees are balanced. We consider three algorithmically interesting operations that manipulate entire trees. First, we give an O(log2 n) algorithm for calculating the size of a tree. Second, we show how to create a tree containing n copies of some element x in O(log n) time. Finally, we describe an order-preserving algorithm for converting a list to a tree in O(n) time. This last operation is not nearly as straightforward as it sounds!

Tools

SciSpace AgentBiomedical AgentSciSpace RecruitSciSpace for EnterpriseAgent GalleryChat with PDFLiterature ReviewAI WriterFind TopicsParaphraserCitation GeneratorExtract DataAI Detector

Learn

ResourcesCompareGuidesLive Workshops

SciSpace

CareersSupportBrowse PapersPricingSciSpace Affiliate ProgramCancellation & Refund PolicyTermsPrivacyData Sources

Directories

PapersTopicsJournalsAuthorsConferencesInstitutionsPublishersCitation StylesWriting templates

Extension & Apps

SciSpace Chrome ExtensionSciSpace Mobile App

Contact

[email protected]
SciSpace

© 2026 | PubGenius Inc. | Suite # 217 691 S Milpitas Blvd Milpitas CA 95035, USA

soc2