Q:

Why do I see List() in the trace of recursive function, whereas I only use Nil?

This function & function call : 
  def listRange(lo: Int, hi: Int): List[Int] =
    if (lo >= hi) Nil
    else {
        println(listRange(lo + 1, hi) + ","+lo)
        lo :: listRange(lo + 1, hi)
    }                                            
  listRange(1, 3) 

produces this output : 
/> List(),2
//| List(2),1
//| List(),2
//| res1: List[Int] = List(1, 2)

Why is an empty list being output with every recursive iteration ? 

A:

This
List()

is equivalent to Nil, and so the final call to
println(listRange(lo + 1, hi) + ","+lo)

will get a value of Nil from listRange, and display that.

