In a Prolog fact or rule, the name before a left parenthesis is called the functor. The number of arguments in the parentheses is called the arity. $functor/$arity is the name of the predicate. Thus, member(X,List) is a clause of the the member/2 predicate. Given that, how the hell did I give an entire Prolog talk and refer to append(X,Y,Z) as append/2 in the slides? It made no sense. Not that anyone noticed, mind you. The talk went well, people understood, and I found myself glancing nervously at the time and realized, to my astonishment, that the talk wasn't going to run long enough (originally it ran way too long.) Then we got to append/3.
This was a conversational trainwreck. Yeah, I know it can be confusing, but I foolishly thought that this room full of bright programmers would learn append/3 faster than I did.
No.
When I got home, someone read a post I made in comp.lang.prolog asking for feedback on my slides and they sent me email urging me to not include append/3. They wrote "legend has it that it took the original writers of append/3 nearly three weeks to figure out how it works."
People seemed mostly pleased with the talk and some were excited about playing with this technology, but now I know the real sticking point.