Hi,

I found a missing "does not change" sentence fragment in the third section on Lists and Patterns

"Each:: essentially adds a new block to the proceding picture. Such a block contains two things: a reference to the data in that list element, and a reference to the remainder of the list. This is why :: can extend a list without modifying it; extension allocates a new list element but {here} change any of the existing ones, as you can see: "


The example code using pattern matching appears to be a "let rec" short-circuit which I believe deserves a comment in the book. It appears to be puzzling, we are binding a "zero" to the head of the list in order to drop it? I think it is a fine example of OCaml that should be encouraged, not just an isolated case.

let rec drop_zero ls = match ls with
  | [] -> []
  | 0 :: tl -> drop_zero tl
  | hd :: tl -> hd :: drop_zero tl
;;

With kind regards,

Jean