! это так называемый одиночный символ , вы не можете иметь два подряд. Если бы это было не так, вы не могли бы написать, например:
c :- !.
но вместо этого придется написать:
c :- ! .
потому что "!." в противном случае будет интерпретироваться как один токен.
Кроме того, если вы позволите! будь оператором, обе версии имеют недопустимый синтаксис (да, SWI все еще принимает его, но, например, GNU Prolog этого не делает). Вам необходимо написать:
c :- (!).
потому что операторы, которые являются операндами, должны быть заключены в квадратные скобки. Вместо! Используйте, например, "f" и "ff", или подгоняйте символы Юникода для вашего варианта использования.