如何在Prolog中拆分字符串

问题描述 投票:1回答:2

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

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

prolog string-split
2个回答
1
投票

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

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]] ? 

0
投票

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是否有任何其他目的。有人知道任何一个很好的例子来澄清它吗?

© www.soinside.com 2019 - 2024. All rights reserved.