【问题标题】:How to split strings in Prolog如何在 Prolog 中拆分字符串
【发布时间】:2015-12-30 15:49:46
【问题描述】:

我试图了解用户如何输入一个句子,然后在 Prolog 中拆分成单独的单词。 例如, 用户输入这句话:“计算机由硬件组成” 我想把这句话分成:“computer”、“consists”、“of”和“hardware”

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

【问题讨论】:

  • 请显示您尝试过的解决方案以及遇到的具体问题。
  • 至少,请更具体地说明您希望如何与程序交互:您如何称呼它?你期望什么输出?什么是有效输入,什么不是?找出how to ask a good question 也可能会有所帮助。

标签: prolog string-split


【解决方案1】:

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 是否有其他用途。有人知道有什么好的例子可以澄清吗?

【讨论】:

    【解决方案2】:

    如果句子包含在一个列表中(即 [computer, contains, 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]] ? 
    

    【讨论】:

    • 谢谢,但我想知道用户如何输入句子然后使用序言拆分,例如在查询屏幕中:?-什么是计算机?用户应该以这种方式回答这个问题:计算机由硬件组成.用户输入此答案后,序言拆分为[a],[computer],[consists],[of],[hardware]。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2017-06-06
    • 2014-12-25
    • 2013-10-30
    • 2011-03-29
    • 2011-12-05
    相关资源
    最近更新 更多