I am learning Prolog under my Artificial Intelligence Lab, from the source [Learn Prolog Now!](http://www.learnprolognow.org/lpnpage.php?pageid=online).

In the 5th Chapter we come to learn about **Accumulators**. And as an example, these two code snippets are given. 
**To Find the Length of a List**

*without accumulators*:

```
len([],0).
len([_|T],N) :- len(T,X), N is X+1.

```

*with accumulators*:

```
accLen([_|T],A,L) :- Anew is A+1, accLen(T,Anew,L).
accLen([],A,A).

```

**I am unable to understand, how the two snippets are conceptually different? What exactly an accumulator is doing different? And what are the benefits?**

Accumulators sound like *intermediate variables*. (Correct me if I am wrong.) And I had already used them in my programs up till now, so is it really that big a concept?