A novel representation of lists and its application to the function "reverse"
Information Processing Letters
FPCA '93 Proceedings of the conference on Functional programming languages and computer architecture
Ropes: an alternative to strings
Software—Practice & Experience
Purely functional data structures
Purely functional data structures
Bucket elimination: a unifying framework for probabilistic inference
Proceedings of the NATO Advanced Study Institute on Learning in graphical models
Programming pearls: little languages
Communications of the ACM
Science of Computer Programming - Special issue on mathematics of program construction
Stochastic lambda calculus and monads of probability distributions
POPL '02 Proceedings of the 29th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Concatenate, reverse and map vanish for free
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Access path selection in a relational database management system
SIGMOD '79 Proceedings of the 1979 ACM SIGMOD international conference on Management of data
Guarded recursive datatype constructors
POPL '03 Proceedings of the 30th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Maude: specification and programming in rewriting logic
Theoretical Computer Science - Rewriting logic and its applications
Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire
Proceedings of the 5th ACM Conference on Functional Programming Languages and Computer Architecture
Relating Accumulative and Non-accumulative Functional Programs
RTA '01 Proceedings of the 12th International Conference on Rewriting Techniques and Applications
FUNCTIONAL PEARLS: Probabilistic functional programming in Haskell
Journal of Functional Programming
Stream fusion: from lists to streams to nothing at all
ICFP '07 Proceedings of the 12th ACM SIGPLAN international conference on Functional programming
Haskell '07 Proceedings of the ACM SIGPLAN workshop on Haskell workshop
VLDB '04 Proceedings of the Thirtieth international conference on Very large data bases - Volume 30
Journal of Functional Programming
A probabilistic language based on sampling functions
ACM Transactions on Programming Languages and Systems (TOPLAS)
Troll, a language for specifying dice-rolls
Proceedings of the 2009 ACM symposium on Applied Computing
Embedded Probabilistic Programming
DSL '09 Proceedings of the IFIP TC 2 Working Conference on Domain-Specific Languages
Optimizing relational algebra operations using generic equivalence discriminators and lazy products
Proceedings of the 2010 ACM SIGPLAN workshop on Partial evaluation and program manipulation
Generic multiset programming for language-integrated querying
Proceedings of the 6th ACM SIGPLAN workshop on Generic programming
Regular, shape-polymorphic, parallel arrays in Haskell
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Avalanche-safe LINQ compilation
Proceedings of the VLDB Endowment
Accelerating Haskell array codes with multicore GPUs
Proceedings of the sixth workshop on Declarative aspects of multicore programming
Proceedings of the seventh ACM SIGPLAN workshop on Generic programming
Haskell boards the ferry: database-supported program execution for Haskell
IFL'10 Proceedings of the 22nd international conference on Implementation and application of functional languages
Generic multiset programming with discrimination-based joins and symbolic Cartesian products
Higher-Order and Symbolic Computation
A type theory for probability density functions
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
ESOP'12 Proceedings of the 21st European conference on Programming Languages and Systems
Hi-index | 0.00 |
A domain-specific language (DSL) is a specification language designed to facilitate programming in a certain application domain. A well-designed DSL reflects the natural structure of the modeled domain, enforces abstraction, and its implementation exploits domain-specific properties for safety and performance. Expounding on the latter, in this paper we describe a simple, but powerful method for gradually enhancing a base implementation with computational performance improvements. It consists of adding constructors for expensive operations if this facilitates asymptotic performance improvements in some contexts, with at most constant-factor overhead. The resulting implementation can be thought of as executing "standard" computation steps from the base implementation interleaved with symbolic computation steps on the newly introduced constructors. Evaluation of constructor expressions is lazy in a strong sense: It does not only delay evaluation by thunkifying its standard evaluation, but performs run-time inspection to evaluate constructor expressions in a nonstandard way. Extending earlier work by Henglein and Larsen [1] on generic multiset programming we arrive at novel multiset representations with constructors for unions, Cartesian products, scalar multiplication, and mapping binary functions over Cartesian products. We show how the resulting implementation can be used to implement finite probability distributions with exact (rational) probabilities. It supports computing both the expected value and, what we believe to be novel, the variance of random variables over n-ary product distributions efficiently by avoiding enumeration of the product sample space.