Syntactically, a data-term is just a term.
There are a couple of differences from Prolog. The first one is that double-quoted strings are atomic in Mercury, they are not abbreviations for lists of character codes. The second is that Mercury provides several extensions to Prolog’s term syntax: Mercury terms may contain record field selection and field update expressions, conditional (if-then-else) expressions, function applications, higher-order function applications, lambda expressions, and explicit type qualifications.
A data-term is either a variable, a data-functor, or a special data-term. A special data-term is a conditional expression, a record syntax expression, a unification expression, a lambda expression, a higher-order function application, or an explicit type qualification.
|• Record syntax:|
|• Unification expressions:|
|• Conditional expressions:|
|• Lambda expressions:|
|• Higher-order function applications:|
|• Explicit type qualification:|
|• Type conversion expressions:|