Prolog 如何计算序言中的单词?
我尝试在prolog中计算字符串中的单词。比如“不,我绝对不是馅饼!” 给我数字7,下一个例子“w0w这样的t3xt…给数字5。 我曾经考虑过减法,这是一个库函数,只能返回白色字符。但问题是,无法返回5个单词,也无法返回2个单词。 我想到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). 这将删除空格,无
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
发生了什么变化”
,并通过将关键字括在后面的勾号中来强调关键字
,如减法
?目前,我不理解您的问题。