Results 1 
5 of
5
Equal Rights for Functional Objects or, The More Things Change, The More They Are the Same
, 1993
"... DATA TYPES A. Comparing Type Objects There has been as much confusion over type identity as there has been over object identity, although the type identity problem is usually referred to as the type equivalence problem [Aho86,s.6.3] [Wegbreit74] [Welsh77]. The type identity problem is to determine ..."
Abstract

Cited by 22 (7 self)
 Add to MetaCart
DATA TYPES A. Comparing Type Objects There has been as much confusion over type identity as there has been over object identity, although the type identity problem is usually referred to as the type equivalence problem [Aho86,s.6.3] [Wegbreit74] [Welsh77]. The type identity problem is to determine when two types are equal, so that type checking can be done in a programming language. 22 Algol68 takes the point of view of "structural" equivalence, in which nonrecursive types that are built up from primitive types using the same type constructors in the same order should compare equal, while Ada takes the point of view of "name" equivalence, in which types are equivalent if and only if they have the same name. We will ignore the software engineering issues of which kind of type equivalence makes for betterengineered programs, and focus on the basic issue of type equivalence itself. We note that if a type system offers the type TYPEi.e., it offers firstclass representations of typ...
The Gabriel 'Triangle' Benchmark at Warp Speed
 ACM Lisp Pointers V,3 (JulSep
, 1992
"... INTRODUCTION The "Triangle" benchmark is typically the longest of the Gabriel Lisp benchmarks, taking between 14.44 seconds on the Cray1 and 1510 seconds on the Xerox Dolphin [Gabriel85]. 1 Triangle performs a classical AI task, in that it solves a puzzle game using a combinatorial search. Unfor ..."
Abstract

Cited by 2 (1 self)
 Add to MetaCart
INTRODUCTION The "Triangle" benchmark is typically the longest of the Gabriel Lisp benchmarks, taking between 14.44 seconds on the Cray1 and 1510 seconds on the Xerox Dolphin [Gabriel85]. 1 Triangle performs a classical AI task, in that it solves a puzzle game using a combinatorial search. Unfortunately, the standard implementation of the Triangle benchmark is an embarrassment to the AI and Lisp communities, because it does not utilize the best algorithm, and therefore continues to perpetuate the myth that "Lisp is slow". We show how to speed up Triangle through a combination of memoizing [Bird80] and bitvector techniques [Baker90], to yield a time of 0.07 seconds on a modern RISC workstation (the 80860based OKIstation^TM), which is 206 times faster than the Cray1 speed in [Gabriel85]. Our techniques eliminate redundancy from the computation, which has the effect of eliminating potential parallelism, as well. B. THE STANDARD TRIA
The Efficient Implementation of Common Lisp's SEARCH Function on Bitvectors
 Internal Memorandum, Nimble Computer Corporation
, 1989
"... The efficient implementation of Common Lisp's SEARCH function specialized to bitvectors is discussed. With its nonwordaligned search patterns and its small 2element alphabet, a bitvector SEARCH can often be the most inefficient of all SEARCH'es. Techniques, some of which we believe are novel, a ..."
Abstract

Cited by 1 (1 self)
 Add to MetaCart
The efficient implementation of Common Lisp's SEARCH function specialized to bitvectors is discussed. With its nonwordaligned search patterns and its small 2element alphabet, a bitvector SEARCH can often be the most inefficient of all SEARCH'es. Techniques, some of which we believe are novel, are discussed for overcoming these problems and achieving excellent performance on standard computer hardware. To reduce the amortized pattern preprocessing costs, we use four distinct search algorithms for pattern lengths of 1, 2 to w, w+1 to 2w2, and larger, where w is the algorithm byte size. Fast searching of a bitstring for an exact match of a shorter pattern bitstring can be required for some "bitstuffing" communication protocols, and for the 1dimensional portion of a 2dimensional search within a binary image, such as those found on a bitmapped display or transmitted by facsimile. Some of the techniques discussed are also relevant for searching with other small alphabets, e.g.,...
The Nimble Type Inferencer for Common Lisp84
 Tech. Rept., Nimble Comp
, 1990
"... data types model the semantic intent of the programmer with respect to individual variable values, so that global properties of these individual values (e.g., evenness or primeness of an integer value) are maintained. The assert construct allows for the specification of complex relationships among s ..."
Abstract
 Add to MetaCart
data types model the semantic intent of the programmer with respect to individual variable values, so that global properties of these individual values (e.g., evenness or primeness of an integer value) are maintained. The assert construct allows for the specification of complex relationships among several variables. However, since we are interested in improving runtime efficiency, we will assume that the program is already semantically correct, and will therefore concern ourselves only with the determination of tight lattice bounds on the values of variables. Performing type inference requires proving many small theorems about programs, and therefore runs the risk of being confused with the more difficult task of theoremproving for the purpose of proving programs correct relative to some external criteria. While some of the techniques may be similar to both tasks, the goals are completely different. For example, it is considered acceptable and routine for correctness provers to inte...
Speeding up the 'Puzzle' Benchmark a 'Bit'
"... INTRODUCTION Baskett's "Puzzle" benchmark has been used for almost a decade for the evaluation of hardware architectures, and was included in the "Gabriel" suite of Lisp benchmarks [Gabriel85]. "Puzzle" solves a 3dimensional packing problem by attempting to pack pieces of 4 different types into a ..."
Abstract
 Add to MetaCart
INTRODUCTION Baskett's "Puzzle" benchmark has been used for almost a decade for the evaluation of hardware architectures, and was included in the "Gabriel" suite of Lisp benchmarks [Gabriel85]. "Puzzle" solves a 3dimensional packing problem by attempting to pack pieces of 4 different types into a 5x5x5 cube. The class of such packing problems is closely related to the "binpacking" and "knapsack" problems of complexity theory, which are known to be NPcomplete [Baase78]. Thus, while it is unlikely that clever programming will allow us to escape the asymptotic exponential behavior of these problems, it can gain us some very real performance improvements. It is worth studying packing problems because of their ubiquity in the real world. In addition to the obvious examples from businesse.g., freight loadingthere are similarities with real problems in biochemical bonding. The standard version of Puzzle found in the Gabriel benchmark suite is an embarrassment for the Lisp