我正在尝试理解用户如何输入一个句子,然后将在Prolog中分裂为单独的单词。例如,用户输入这句话:“计算机由硬件组成”我想把这句话分成:“计算机”,“组成”,“的”和“硬件”
有人能解释一下用户如何在Prolog中输入句子然后拆分吗?
发布于 2019-03-05 15:14:10
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是否还有其他用途。有人知道有什么好的例子来澄清它吗?
发布于 2016-01-05 21:00:05
如果句子包含在列表中(例如,computer,consists,of,hardware),那么您可以使用:
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]] ?
https://stackoverflow.com/questions/34532662
复制相似问题