The Programming Language Aspects of ThingLab, a Constraint-Oriented Simulation Laboratory
ACM Transactions on Programming Languages and Systems (TOPLAS)
APL '79 Proceedings of the international conference on APL: part 1
Static evaluation of functional programs
SIGPLAN '86 Proceedings of the 1986 SIGPLAN symposium on Compiler construction
A RISC architecture for symbolic computation
ASPLOS II Proceedings of the second international conference on Architectual support for programming languages and operating systems
IEEE Transactions on Software Engineering
Lazy evaluation and the logic variable
ICS '88 Proceedings of the 2nd international conference on Supercomputing
I-structures: data structures for parallel computing
ACM Transactions on Programming Languages and Systems (TOPLAS)
The semantic foundations of concurrent constraint programming
POPL '91 Proceedings of the 18th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A fully abstract semantics for a first-order functional language with logic variables
ACM Transactions on Programming Languages and Systems (TOPLAS)
Multiparadigm research: a new direction of language design
ACM SIGPLAN Notices
Abstract semantics for a higher-order functional language with logic variables
POPL '92 Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Integrating Multiple Paradigms within the Blackboard Framework
IEEE Transactions on Software Engineering
A functional representation of data structures with a hole
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Equations, sets, and reduction semantics for functional and logic programming
LFP '86 Proceedings of the 1986 ACM conference on LISP and functional programming
Equational logic programming: an extension to equational programming
POPL '86 Proceedings of the 13th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Hi-index | 0.00 |
Logic programming offers a variety of computational effects which go beyond those customarily found in functional programming languages. Among these effects is the notion of the “logical variable.” i.e. a value determined by the intersection of constraints, rather than by direct binding. We argue that this concept is “separable” from logic programming, and can sensibly be incorporated into existing functional languages. Moreover, this extension appears to significantly widen the range of problems which can efficiently be addressed in function form, albeit at some loss of conceptual purity. In particular, a form of side-effects arises under this extension, since a function invocation can exert constraints on variables shared with other function invocations. Nevertheless, we demonstrate that determinacy can be retained, even under parallel execution. The graph reduction language FGL is used for this demonstration, by being extended to a language FGL+LV permitting formal parameter expressions, with variables occurring therein bound by unification. The determinacy argument is based on a novel dataflow-like rendering of unification. In addition the complete partial order employed in this proof is unusual in its explicit representation of demand, a necessity given the “benign” side-effects that arise. An implementation technique is suggested, suitable for reduction architectures.