  Python and Prolog express different programming paradigms, with different
strengths. Python is wildly popular because it is well-structured, easy to use,
and mixes well with thousands of scientific and machine learning programs
written in C. Prolog's logic-based approach provides powerful reasoning
capabilities, especially when combined with constraint evaluation,
probabilistic reasoning, well-founded negation, and other advances. Both
languages have commonalities as well: both are usually written in C, both are
dynamically typed, and both use data structures based on a small number of
recursive types.
  This paper describes the design and implementation of Janus, a system that
tightly combines Prolog and Python into a single process. Janus bi-translates
data structures and offers performance of many hundreds of thousands of
round-trip inter-language calls per second. Although Janus is still new, it has
been used in commercial applications including natural language processing,
visual query answering and robotic automation. Janus was developed for XSB, but
porting Janus code to a second Prolog has been straightforward, indicating that
Janus is a tool that other Prologs may easily adopt.
