AFAIK there is only one empty `list' in PL, and that is `NIL'. So
after `conc'atenating to it's end it would no longer be empty.
[de ex1 
[link 'A] ] ] ]
[de ex2 
[let [R [list]]
[conc R [list 'A]] ]
# Will have to find the end of `R' each time!!
# Even worse if `R' is `circ'ular, which will result in
infinite recursion and out of stack memory.
# In Your second implementation `'[A]' was `conc'ed to itself,
which resulted in `circ'ular list `[A .]'.
# : [setq L1 '[A]] [conc  L1 L1]
# -> [A .]
# To avoid that it was corrected to `[list 'A]'.
(cdr R) ] ]
[de ex3 [N]
[default N 10]
[let [R ]
[for I 10
[fifo 'R I] ]
[prog1 (cdr R)
(con R ) ] ] ]