Prolog 如何计算序言中的单词?

Prolog 如何计算序言中的单词?,prolog,Prolog,我尝试在prolog中计算字符串中的单词。比如“不,我绝对不是馅饼!” 给我数字7,下一个例子“w0w这样的t3xt…给数字5。 我曾经考虑过减法,这是一个库函数,只能返回白色字符。但问题是,无法返回5个单词,也无法返回2个单词。 我想到 filter([],L). filter([X,Y|XS],[Y|XS]):- X = ' ',Y = ' ',L = [Y|XS], filter([Y|XS],L). filter([X|XS],L):- filter(Xs,L). 这将删除空格,无

我尝试在prolog中计算字符串中的单词。比如“不,我绝对不是馅饼!” 给我数字7,下一个例子“w0w这样的t3xt…给数字5。 我曾经考虑过减法,这是一个库函数,只能返回白色字符。但问题是,无法返回5个单词,也无法返回2个单词。 我想到

filter([],L).
filter([X,Y|XS],[Y|XS]):-  X = ' ',Y = ' ',L = [Y|XS], filter([Y|XS],L).
filter([X|XS],L):- filter(Xs,L). 

这将删除空格,无法返回,但它不起作用。我有一个提示。

Prolog中的字符串是字符代码列表,而不是原子列表,这解释了为什么像
X=''
这样的测试失败。看看执行的结果如何

write("ab cd"), nl.
在Prolog系统中

您的3个条款中有错误:

  • 您希望第一个子句在最后一个参数中返回什么?
    L
    与Prolog程序中的任何其他变量一样,是出现在其中的子句的局部变量,而不是全局变量
  • 第二个子句将
    L
    与一个列表统一起来,并将其用作递归调用的第二个参数:您希望递归调用更改
    L
    的值吗?这种情况永远不会发生:在Prolog中没有变量赋值,通过构建术语并将其与newvariabl统一来进行更改是的
  • 你的第三条中的
    X
    发生了什么变化
  • 请您关闭
    ,并通过将
    关键字括在后面的勾号中来强调
    关键字
    ,如
    减法
    ?目前,我不理解您的问题。