Jonas Barklund

Learn More
In this review of metaprogramming in logic we pay equal attention to theoretical and practical issues: the contents range from mathematical and logical preliminaries to implementation and applications in, e.g., software engineering and knowledge representation. The area is one in rapid development but we have emphasized such issues that are likely to be(More)
Programs operating on inductively deened data structures, such as lists, are naturally deened by recur-sive programs, while programs operating onìndexable' data structures, such as arrays, are naturally deened by iterative programs. It has recently been shown how many recursive programs can be transformed or compiled to iterative programs operating on(More)
The paper focuses on three ideas for solving problems with writing interpreters for the logic programming language Prolog in Prolog and how to combine these ideas to an interpreter for Prolog which is both simple and eecient. The resulting interpreter system can be incorporated into a Prolog based on Warren's Abstract Machine and built mostly from existing(More)
We are developing a multilevel metalogic programming language that we call Alloy. It is based on rst-order predicate calculus extended with metalogical constructs. An Alloy program consists of a collection of theories, all in the same language, and a representation relation over these theories. The whole language is self-representable, including names for(More)
The expressiveness of the declarative language GG odel can be improved by adding to it bounded quantiications, i.e., quantiications over nite domains, and arrays. Many problems can be expressed more concisely using bounded quantiications than using recursion. Arrays are natural for many applications, e.g., in scientiic computing, and are conveniently used(More)
D We present an application of metaprogramming in logic that, unlike most metaprogramming applications, is not primarily concerned with controlling the execution of logic programs. Metalevel computation is used to define theories from schemata that were either given explicitly or obtained by abstraction from other theories. Our main application is a(More)