Predicate dispatch
Polymorphism |
---|
Ad hoc polymorphism |
Parametric polymorphism |
Subtyping |
In computer programming, predicate dispatch is a generalisation of multiple dispatch ("multimethods") that allows the method to call to be selected at runtime based on arbitrary decidable logical predicates and/or pattern matching attached to a method declaration.[1][2]
Raku supports predicate dispatch using "where" clauses that can execute arbitrary code against any function or method parameter.[3]
Julia has a package for it with PatternDispatch.jl but otherwise natively supports multiple dispatch.
Experimental implementations have been created for Common LISP,[4][5] and for Java (JPred[2]).
It allows open extension of previously declared methods at a fine-grained level, but multiple extensions with identical or overlapping predicates created by different developers may interfere with each other in unanticipated ways. In this respect it is similar to aspect-oriented programming.
References
- ↑ Millstein, T.. "Practical Predicate Dispatch". OOPSLA '05. http://web.cs.ucla.edu/~todd/research/oopsla04.pdf.
- ↑ 2.0 2.1 Millstein, T.; Frost, C.; Ryder, J.; Warth, A. (2009). "Expressive and modular predicate dispatch for Java". ACM Transactions on Programming Languages and Systems 31 (2): 1. doi:10.1145/1462166.1462168.
- ↑ "class Signature". https://docs.raku.org/type/Signature#index-entry-where_clause.
- ↑ "Predicate Dispatching in Common Lisp Object System". ftp://publications.ai.mit.edu/ai-publications/2001/AITR-2001-006.pdf.
- ↑ "pcostanza/filtered-functions". https://github.com/pcostanza/filtered-functions.
External links
Original source: https://en.wikipedia.org/wiki/Predicate dispatch.
Read more |