CLU reference manual
Compilers: principles, techniques, and tools
Compilers: principles, techniques, and tools
The C++ programming language
Revised report on the algorithmic language scheme
ACM SIGPLAN Notices
Common LISP: the language (2nd ed.)
Common LISP: the language (2nd ed.)
Structured programming with limited private types in Ada: nesting if for the soaring eagles
ACM SIGAda Ada Letters
CONS should not CONS its arguments, or, a lazy alloc is a smart alloc
ACM SIGPLAN Notices
Updating elements of a collection in place
ACM SIGAda Ada Letters
Object-Oriented Software Construction
Object-Oriented Software Construction
Rabbit: A Compiler for Scheme
Higher order objects in pure object-oriented languages
ACM SIGPLAN Notices
A graph model for object oriented programming
ACM SIGPLAN Notices
Higher order objects in pure object-oriented languages
ACM SIGPLAN OOPS Messenger
Internal Iteration Externalized
ECOOP '99 Proceedings of the 13th European Conference on Object-Oriented Programming
A technique for generic iteration and its optimization
Proceedings of the 2006 ACM SIGPLAN workshop on Generic programming
A framework for higher-order functions in C++
COOTS'95 Proceedings of the USENIX Conference on Object-Oriented Technologies on USENIX Conference on Object-Oriented Technologies (COOTS)
Efficient object querying for java
ECOOP'06 Proceedings of the 20th European conference on Object-Oriented Programming
Hi-index | 0.01 |
The appearance of iterators in an object-oriented language appears to be inversely related to the power of the language's intrinsic control structures. Iterator classes are used for the sole purpose of enumerating the elements of an abstract collection class without revealing its implementation. We find that the availability of higher-order functions and function closures eliminates the need for these ad hoc iterator classes, in addition to providing the other benefits of "mostly functional programming". We examine a purely functional iteration protocol for the difficult task of comparing the collections of leaves on two non-isomorphic trees---the so-called "samefringe" problem---and find that its type signature requires recursive (cyclic) functional types. Although higher-order "member functions" and recursive (cyclic) functional types are unusual in object-oriented languages, they arise quite naturally and provide a satisfying programming style.