I am trying to understand what this block of code is doing:

```
let rec size x =
    match x with
      [] -> 0
    | _::tail -> 1 + (size tail) ;;

```

I know that this expression computes the size of a list, but I don't understand where in the code it reduces the list one by one. For example, I think it needs to go from [1;2;3] to [2;3] to [3], but where or how does it do it? I don't get it. 

Thanks.