The dot operator was used for lists in the very first Prolog system of 1972, written in Algol-W, sometimes called Prolog 0. It is inspired by similar notation in LISP systems. The following exemple is from the paper The birth of Prolog by Alain Colmerauer and Philippe Roussel – the very creators of Prolog.

+ELEMENT(*X, *X.*Y). +ELEMENT(*X, *Y.*Z) -ELEMENT(*X, *Z).

At that time, [] used to be NIL .

The next Prolog version, written in Fortran by Battani & Meloni, used cases to distinguish atoms and variables. Then DECsystem 10 Prolog introduced the square bracket notation replacing nil and X.Xs with [] and [X,..Xs] which in later versions of DECsystem 10 received [X|Xs] as an alternative. In ISO Prolog, there is only [X|Xs] , .(X,Xs) , and as canonical syntax '.'(X,Xs) .

Please note that the dot has many different rôles in ISO Prolog. It serves already as

end token when followed by a % or a layout character like SPACE, NEWLINE, TAB.

decimal point in a floating point number, like 3.14159

graphic token char forming graphic tokens as =..

So if you are now declaring . as an infix operator, you have to be very careful. Both with what you write and what Prolog systems will read. A single additional space can change the meaning of a term. Consider two lists of numbers in both notations:

[1,2.3,4]. [5]. 1 .2.3.4.[]. 5.[].

Please note that you have to add a space after 1 . In this context, an additional white space in front of a number may change the meaning of your terms. Like so:

[1|2.3]. [4]. 5. []. 1 .2.3. 4.[]. 5. [].

Here is another example which might be even more convincing:

[1,-2]. 1.(-2).[].

Negative numbers require round brackets within dot-lists.

Today, there is only YAP and XSB left that still offer infix . by default – and they do it differently. And XSB does not even recognize above dot syntax: you need round brackets around some of the nonnegative numbers.

You wrote that N.H.L appears to be a more convenient way to say [N|[H|L]] . There is a simple rule-of-thumb to simplify such expressions in ISO Prolog: Whenever you see within a list the tokens | and [ immediately after each other, you can replace them by , (and remove the corresponding ] on the right side). So you can now write: [N,H|L] which does not look that bad.

You can use that rule also in the other direction. If we have a list [1,2,3,4,5] we can use | as a "razor blade" like so: [1,2,3|[4,5]] .