Home > other >  Invert atoms from list to integers - Prolog
Invert atoms from list to integers - Prolog

Time:01-16

I have this:

streams=[[1,2,2,4],[2,1,4,2],[3,4,1,3],[4,3,3,1]]

And the numbers inside that lists are all atoms and I need to invert then all to integers. The streams should look like this:

streams=[[1,2,2,4],[2,1,4,2],[3,4,1,3],[4,3,3,1]]

But with all numbers with format 'integer' and not 'atom' Can someone explain how tranform those numbers to integers please?

CodePudding user response:

To convert between atom and number you can use the built-in predicate atom_number/2:

?- atom_number(Atom, 1).
Atom = '1'.

?- atom_number('1', Number).
Number = 1.

Using maplist/3, you can apply that convertion on all elements of a list of atoms:

?- maplist(atom_number, ['1','2','2','3'], Numbers).
Numbers = [1, 2, 2, 3].

To apply that convertion on all atoms in a list of lists you can do as follows:

?- maplist(maplist(atom_number), [['1','2'],['2','1','4'],['3'],['4','1']], ListOfLists).
ListOfLists = [[1, 2], [2, 1, 4], [3], [4, 1]].
  •  Tags:  
  • Related