在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'.