Junicon is a Java-based interpreter for the Unicon programming language. Unicon in turn is a unique object-oriented dynamic language descended from Icon that supports goal-directed evaluation of generator expressions. Junicon's novel implementation uses program transformation to translate Unicon into another scripting language, Groovy, that runs under Java. The result is a transformational interpreter for goal-directed evaluation that, because it runs on Java, is portable and has access to the full range of Java facilities for concurrency and graphics.
A key feature of Junicon is its seamless integration with Java, which allows Java methods, class fields, and data types to be accessed from Unicon, and vice-versa. Junicon can function either as an interactive line-by-line interpreter, or as a tool that can translate its input to Java for compilation.
The key idea of goal-directed evaluation is that every expression is a generator that produces a sequence of values or fails, and function application searches to find successful results over the cross-product of its operands. For example, a simple expression such as
f((1 to 3) > 1)
for i in (1 to 3) { if i > 1 then f(i) else fail }
f(2), f(3)
f(e,e') = filter(succeed(concat(map(f, e x e')))) where f(*,fail)=fail and f(fail,*)=fail