Blank nodes denote anonymous resources. Sometimes they are also named anonymous OIDs, . Without digits every occurance means a completely new identifier. With the numbered syntax _#1,_#2,… occurances of the same blank node (e.g. _#2) means the same identifier, but only within a clause. I.e. if _#2 occurs in two facts, they are different identifiers.
Syntax
_# digit*
Example
q(1,_#).
q(2,_#).
?- q(?X,?Y). // returns two different blank nodes
tmp(1).
tmp(2).
?- ?X = p(?Y,_#,_#1,_#,_#1,_#2), tmp(?Y). // returns same blank nodes for both results
In rare cases if you need to reference an existing blank nodes use the following syntax:
_# '<UUID>'
Example
?- ?X = _#'n6c5245b2-de51-445a-9b14-5b3dc23ac239-000d'.