在Prolog中,如果我将[hello,this,is,a,sentence]等列表作为谓词的参数,如何获得返回值Y,以便将该列表作为字符串返回有空格?例如 [hello,this,is,a,sentence] 将返回你好这是一个句子。
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
谓词仅处理附加列表这一事实有关,但我不确定。我该怎么办?提前谢谢。
答案 0 :(得分:3)
SWI-Prolog有一个专门的内置:atomic_list_concat / 3
?- atomic_list_concat([hello,this,is,a,sentence],' ',A).
A = 'hello this is a sentence'.
答案 1 :(得分:0)
在丹尼尔的帮助下弄明白了。要将列表放入带空格的字符串,请使用atomics_to_string/3
。就我而言:
makesentence([X],X).
makesentence([H|T],Y):-
makesentence(T,Result),
atomics_to_string([H,Result],' ',Y).
在第atoms_to_string([H,Result],' ',Y).
行中,第一个参数是列表,第二个参数是我要在每个条目之间添加的内容,在本例中是空格' '
,第三个参数是分配输出,在我的情况下是Y.感谢Daniel指出我正确的方向。