如何在Prolog中拆分字符串

时间:2015-12-30 15:49:46

标签: prolog string-split

我试图理解用户如何输入一个句子然后将Prolog分成单独的单词。 例如, 用户输入这句话:“计算机由硬件组成” 我想将这句话分为:“计算机”,“包含”,“由”和“硬件”

有人可以解释用户如何输入句子然后将其拆分为Prolog吗?

2 个答案:

答案 0 :(得分:1)

如果句子包含在列表中(即[计算机,包含,硬件]),那么您可以使用:

SELECT mnthyears FROM dates 
ORDER BY str_to_date(replace(replace('(Jan 2016)',')',''),'(',''),'%b  %Y') DESC

例如:

split(L,Result) :- 
   splitacc(L, [], Result).
splitacc([], Acc, Result) :- 
   Result=Acc.
splitacc([H|T], Acc, Result) :- 
   append(Acc, [[H]], NewAcc), 
   splitacc(T, NewAcc, Result). 

答案 1 :(得分:0)

Swi-Prolog具有内置谓词,这使这相当容易:

?- split_string("computer consists of hardware", "\s", "\s", L).
L = ["computer", "consists", "of", "hardware"].

据我了解,split_string(+String, +SepChars, +PadChars, -SubStrings)中的第三个参数+ PadChars会修剪周围的空间。

例如,在此示例中,将+ PadChars设置为空字符串,添加前导和尾随空格会产生:

?- split_string(" computer consists of hardware ", "\s", "", L).
L = ["", "computer", "consists", "of", "hardware", ""].

将PadChars设置为“ \ s”会产生:

?- split_string(" computer consists of hardware ", "\s", "\s", L).
L = ["computer", "consists", "of", "hardware"].

但是我不确定+ PadChars是否有其他用途。有人知道有什么好的例子可以澄清吗?