任何人都知道如何解决这个问题
计算表达式中运算符的出现次数。例如,查询:
?- count(a+b*c-(2+3*4)/(5*(2+a)+(b+c)^f((d-e)*(x-y))), *, C).
将计算作为第一个参数和C
输出的表达式中operator *的出现次数我正在使用SWI-prolog
答案 0 :(得分:2)
这是家庭作业吗?
以下是一些提示:
Prolog运算符是围绕正常序言术语的语法糖。表达式3 * 2 + 1
被解析为术语'+'('*'(3,2),1)
。
内置谓词=..
将一个术语分解为一个列表,其中的头部是仿函数,其尾部包含作为原始参数的[未分解]术语。术语
内置谓词functor/3
将一个术语与其仿函数和arity统一起来。
您可能还想查看arg/3
,它提供了通过序号位置检查指定术语的参数的方法。
现在你知道了,一个相当简单的递归解决方案应该出现。如果你需要考虑所需运算符的arity,它会更复杂(但不是很多)。