在Prolog中,如果我将诸如[hello,this,is,a,sentence]之类的列表用作谓词的参数,如何获得返回值Y,以便它将该列表作为带空格的字符串返回?例如 [您好,这个,是,一个句子] 将返回,您好,这是一个句子

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

我能够递归地遍历列表,并让Y返回与此相同的列表输入:
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

但是,当我尝试使输出不包含列表且包含空格时,我会犯错。我已经试过了:
makesentence([],'').
makesentence([X],X).
makesentence([H|T],Y):-
    makesentence(T,Result),
    append(H,Result,Y).

我认为这与Prolog中的append谓词仅处理附加列表有关,但我不确定。我将如何进行?提前致谢。

最佳答案

SWI-Prolog具有专门的内置对此:atomic_list_concat / 3

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

10-04 14:39