====== FAQ ====== ===== How can I debug Prolog programs? ===== There is a [[http://www.swi-prolog.org/pldoc/doc_for?object=section%282,%273.5%27,swi%28%27/doc/Manual/guitracer.html%27%29%29|graphical debugger in SWI Prolog]] that is very useful to go through your program step by step, inspect the variable bindings and the open choice points. ===== Which programming language should I use for what purpose? ===== KnowRob is implemented in a combination of OWL, Prolog and Java. When creating extensions, it is worth considering which language to implement them in: == OWL: == * Description language, no programming language * Class taxonomy of objects, actions, events,... * Instances of these classes (e.g. environment models, experiences) * Robot capabilities/action requirements == Prolog: == * Logical programming language: conceptually close to the knowledge representation, good at searching and pattern matching * Useful for functionality interacting closely with the internal representation (OWL gets parsed into Prolog triples) * Wrapper predicates to simplify commonly used queries, inference predicates (DL inference, computables,...) * Functionality involving (recursive) search, graph matching, reasoning about ontological structure, ... == C++: == * Object-oriented programming language that can interact with Prolog via the [[https://www.swi-prolog.org/pldoc/doc_for?object=section(%27packages/pl2cpp.html%27)|SWIPL C++]] * Conceptually further away from the internal knowledge representation * Good library support, therefore useful for external interfaces (WWW, ROS,...)