Foundations of logic programming; (2nd extended ed.)
Foundations of logic programming; (2nd extended ed.)
Declarative modeling of the operational behavior of logic languages
Theoretical Computer Science
Identifying the semantic and textual differences between two versions of a program
PLDI '90 Proceedings of the ACM SIGPLAN 1990 conference on Programming language design and implementation
Handbook of theoretical computer science (vol. B)
Identifying syntactic differences between two programs
Software—Practice & Experience
A refactoring tool for Smalltalk
Theory and Practice of Object Systems - Special issue object-oriented software evolution and re-engineering
Refactoring: improving the design of existing code
Refactoring: improving the design of existing code
A Polyvariant Binding-Time Analysis for Off-line Partial Deduction
ESOP '98 Proceedings of the 7th European Symposium on Programming: Programming Languages and Systems
ICLP '02 Proceedings of the 18th International Conference on Logic Programming
Program dependence analysis of concurrent logic programs and its applications
ICPADS '96 Proceedings of the 1996 International Conference on Parallel and Distributed Systems
Tool support for refactoring functional programs
Haskell '03 Proceedings of the 2003 ACM SIGPLAN workshop on Haskell
Winnowing: local algorithms for document fingerprinting
Proceedings of the 2003 ACM SIGMOD international conference on Management of data
Improving prolog programs: Refactoring for prolog
Theory and Practice of Logic Programming
Towards a Normal Form for Mercury Programs
Logic-Based Program Synthesis and Transformation
An Algorithm for Sophisticated Code Matching in Logic Programs
ICLP '08 Proceedings of the 24th International Conference on Logic Programming
Non-discriminating Arguments and Their Uses
ICLP '09 Proceedings of the 25th International Conference on Logic Programming
Clones in logic programs and how to detect them
LOPSTR'11 Proceedings of the 21st international conference on Logic-Based Program Synthesis and Transformation
Hi-index | 0.00 |
In this work, we devise an analysis that searches for semantically equivalent code fragments within a given logic program. The presence of duplicated code (or functionality) is a primary indication that the design of the program can be improved by performing a so-called refactoring transformation. Within the framework of our analysis, we formally characterize three situations of duplicated functionality and their associated refactorings: the extraction of a duplicated goal into a new predicate, the removal of equivalent predicates and the generalization of two predicates into a higher-order predicate. The resulting analysis detects in a completely automatic way what program fragments are suitable candidates for the considered refactoring transformations.