# DCG with numbering?

**URL:** <https://swi-prolog.discourse.group/t/dcg-with-numbering/7029>\
**Category:** General\
**Created:** [December 4, 2023, 7:23pm UTC](https://swi-prolog.discourse.group/t/dcg-with-numbering/7029 "2023-12-04T19:23:59Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![emiruz](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/emiruz/32/4495_2.png) [@emiruz](https://swi-prolog.discourse.group/u/emiruz)\
**Post date:** [December 4, 2023, 7:23pm UTC](https://swi-prolog.discourse.group/t/dcg-with-numbering/7029/1 "2023-12-04T19:23:59Z")

</div>

Here is what I’m looking for:

```prolog
?- phrase(t(Xs),[a,b,c,d]).
Xs=[1-a,2-b,3-c,4-d].

```

The basic DCG here is:

```prolog
t([])-->[].
t([X|Xs])-->[X],t(Xs).

```

but how can I add the incremental numbering?

---

<div class="post-metadata">

**Author:** ![emiruz](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/emiruz/32/4495_2.png) [@emiruz](https://swi-prolog.discourse.group/u/emiruz)\
**Post date:** [December 4, 2023, 7:30pm UTC](https://swi-prolog.discourse.group/t/dcg-with-numbering/7029/2 "2023-12-04T19:30:33Z")

</div>

Never mind, ChatGPT worked it out:

```prolog
t(Xs) --> t(1, Xs).
t(_, []) --> [].
t(N, [N-X|Xs]) --> [X], {Next is N + 1}, t(Next, Xs).

```

---

<div class="post-metadata">

**Author:** ![peter.ludemann](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/peter.ludemann/32/48_2.png) [@peter.ludemann](https://swi-prolog.discourse.group/u/peter.ludemann)\
**Post date:** [December 4, 2023, 7:45pm UTC](https://swi-prolog.discourse.group/t/dcg-with-numbering/7029/3 "2023-12-04T19:45:42Z")

</div>

You can also number a list by itself:

```prolog
?- List = [a,b,c], findall(I-X, nth1(I,List,X), NumberedList).
List = [a,b,c],
NumberedList = [1-a,2-b,3-c].

```

---

<div class="post-metadata">

**Author:** ![emiruz](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/emiruz/32/4495_2.png) [@emiruz](https://swi-prolog.discourse.group/u/emiruz)\
**Post date:** [December 4, 2023, 10:29pm UTC](https://swi-prolog.discourse.group/t/dcg-with-numbering/7029/4 "2023-12-04T22:29:08Z")

</div>

Thank you 🙂 The final thing does a bit more than just numbering, I just didn’t know how to do the numbering part.

```prolog
:- use_module(library(dcg/basics)).

t(Xs) --> t(1,1,Xs).
t(_,_,[]) --> [].
t(X0,_,Xs) --> "\n",{X is X0+1},!,t(X,1,Xs).
t(X0,Y0,[p(X0,Y0,Y0,[V])|Xs]) --> [V0],{char_code(V,V0)},{Y is Y0+1},!,t(X0,Y,Xs).

```
