我试图理解用户如何输入一个句子,然后将Prolog分成单独的单词。例如,用户输入这句话:“计算机由硬件组成”我想把这句话分成:“计算机”,“组成”,“是”和“硬件”
有人可以解释用户如何输入句子然后将其拆分为Prolog?
如果句子包含在列表中(即[计算机,包含,硬件]),那么您可以使用:
split(L,Result) :-
splitacc(L, [], Result).
splitacc([], Acc, Result) :-
Result=Acc.
splitacc([H|T], Acc, Result) :-
append(Acc, [[H]], NewAcc),
splitacc(T, NewAcc, Result).
例如:
?- split([a, computer, consists, hardware],L).
L = [[a],[computer],[consists],[hardware]] ?
Swi-Prolog有一个内置的谓词,这使得这很容易:
?- split_string("computer consists of hardware", "\s", "\s", L).
L = ["computer", "consists", "of", "hardware"].
据我了解第三个论点,+ PadChars,在split_string(+String, +SepChars, +PadChars, -SubStrings)
,它修剪了周围的空间。
例如,在此示例中添加前导和尾随空格并将+ 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是否有任何其他目的。有人知道任何一个很好的例子来澄清它吗?