Глядя на документацию Prolog, предикатные подписи иногда записываются следующим образом:
foo(:Bar, +Baz, -Qux, ?Mop)
Что такое :, +, - и ? для и как их интерпретировать? Кроме того, являются ли они единственными, которые существуют или их больше?