Jodo1992
Jodo1992

Reputation: 733

Change list elements to a string with spaces in Prolog

In Prolog, if I am taking a list such as [hello,this,is,a,sentence] as a parameter for a predicate, how do I get a return value Y such that it will return that list as a string with spaces? e.g. [hello,this,is,a,sentence] will return hello this is a sentence.

makesentence([H|T],Y):- % some code here

I was able to run through the list recursively and have Y return the same list input with this:

makesentence([],[]).        % base case returns an empty list
makesentence([X],[X]).      % one list element returns that element in a list
makesentence([H|T],Y):-     % a list of more than one element
    makesentence(T,Result), % recursively call function on the tail
    append([H],Result,Y).   % append the head to the rest of the list

But when I try to make the output without a list and with spaces I faulter. I have tried this:

makesentence([],'').
makesentence([X],X).
makesentence([H|T],Y):-
    makesentence(T,Result),
    append(H,Result,Y).

I think it has to do with the fact the append predicate in Prolog only deals with appending a list, but I am unsure. How would I procede? Thanks in advance.

Upvotes: 3

Views: 2216

Answers (2)

CapelliC
CapelliC

Reputation: 60024

SWI-Prolog has a specialized built-in for that: atomic_list_concat/3

?- atomic_list_concat([hello,this,is,a,sentence],' ',A).
A = 'hello this is a sentence'.

Upvotes: 3

Jodo1992
Jodo1992

Reputation: 733

figured it out with the help of Daniel. To put a list into a string with spaces use atomics_to_string/3. In my case:

makesentence([X],X).
makesentence([H|T],Y):-
    makesentence(T,Result),
    atomics_to_string([H,Result],' ',Y).

In the line atoms_to_string([H,Result],' ',Y)., the first parameter is the list, the second is what I want to add in between each entry, in this case a space ' ' and the third parameter is the assignment of the output, which in my case is Y. Thanks to Daniel for pointing me in the right direction.

Upvotes: 0

Related Questions