Search code examples
listscaladata-structuresappendscalaz

What is a DList?


I tried googling for this but all I got were stories about minor celebrities. Given the lack of documentation, what is a DList?


Solution

  • It's a Difference List, along the lines of "Difference List as functions"

    scala> val (l1, l2, l3) = (List(1, 2, 3), List(4, 5, 6), List(7, 8, 9))
    l1: List[Int] = List(1, 2, 3)
    l2: List[Int] = List(4, 5, 6)
    l3: List[Int] = List(7, 8, 9)
    

    Efficient prepending:

    scala> l1 ::: l2 ::: l3
    res8: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
    

    Inefficient appending. This creates an intermediate list (l1 ++ l2), then ((l1 ++ l2) ++ l3)

    scala> l1 ++ l2 ++ l3  // inefficient
    res9: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
    

    DList stores up the appends, and only needs to create one complete list, effectively invoking:

    scala> List(l1, l2, l3) reduceRight ( _ ::: _) 
    res10: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)