Yes. But can't you recognize the common special case of a constant functor and do the optimizations? IIRC SICP does that; its databases of assertions and rules are indexed on the functor, if constant, so you can quickly find relevant facts and rules, but also you can use a variable and search the entire database.
I mean, don't you ever think "Julia is some sort of cousin of mine, but I forget exactly what kind" and then wouldn't you like to follow that with "Let me ask Prolog"? (I used to give implementing "nth cousin k times removed" in logic programming as an exam question, so I have a warm spot in my heart for those obscure relations.)
I hate the name "functor," by the way, because it only encourages students to try to do composition of functions
grandparent(x,y) :- parent(x,(parent(y)) //wrong!
Why aren't they called "relations"?
Although SICP has optimizations for constant ones below the abstraction barrier, in its user-level documentation it treats assertions, rules, and queries as arbitrary token strings, so you can say
(assert! (Brian likes potstickers))
and ask questions such as (?who likes potstickers) and (Brian likes ?what).
P.S. That would also be more Snap!ly, because we have Smalltalk-style title text interspersed with arguments.
P.P.S. And anyway I can never remember the order of arguments to a relation such as PARENT, and it'd be easier for me if the relation were
(parent of ?x is ?y)