首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Prolog中拆分字符串

如何在Prolog中拆分字符串
EN

Stack Overflow用户
提问于 2015-12-30 23:49:46
回答 2查看 2.5K关注 0票数 3

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

有人能解释一下用户如何在Prolog中输入句子然后拆分吗?

EN

回答 2

Stack Overflow用户

发布于 2019-03-05 15:14:10

Swi-Prolog有一个内置的谓词,这使得这一点相当容易:

代码语言:javascript
运行
复制
?- split_string("computer consists of hardware", "\s", "\s", L).
L = ["computer", "consists", "of", "hardware"].

据我所知,split_string(+String, +SepChars, +PadChars, -SubStrings)中的第三个参数+PadChars,它修剪了周围的空格。

例如,在将+PadChars设置为空字符串的情况下,在此示例中添加前导空格和尾随空格将产生以下结果:

代码语言:javascript
运行
复制
?- split_string(" computer consists of hardware ", "\s", "", L).
L = ["", "computer", "consists", "of", "hardware", ""].

而将PadChars设置为"\s“则会产生:

代码语言:javascript
运行
复制
?- split_string(" computer consists of hardware ", "\s", "\s", L).
L = ["computer", "consists", "of", "hardware"].

但我不完全清楚+PadChars是否还有其他用途。有人知道有什么好的例子来澄清它吗?

票数 3
EN

Stack Overflow用户

发布于 2016-01-05 21:00:05

如果句子包含在列表中(例如,computer,consists,of,hardware),那么您可以使用:

代码语言:javascript
运行
复制
split(L,Result) :- 
   splitacc(L, [], Result).
splitacc([], Acc, Result) :- 
   Result=Acc.
splitacc([H|T], Acc, Result) :- 
   append(Acc, [[H]], NewAcc), 
   splitacc(T, NewAcc, Result). 

例如:

代码语言:javascript
运行
复制
?- split([a, computer, consists, hardware],L).
L = [[a],[computer],[consists],[hardware]] ? 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34532662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档