Prolog比较问题

时间:2011-09-16 00:30:01

标签: prolog

任何人都知道如何解决这个问题

计算表达式中运算符的出现次数。例如,查询:

?- count(a+b*c-(2+3*4)/(5*(2+a)+(b+c)^f((d-e)*(x-y))), *, C).

将计算作为第一个参数和C

输出的表达式中operator *的出现次数

我正在使用SWI-prolog

1 个答案:

答案 0 :(得分:2)

这是家庭作业吗?

以下是一些提示:

  • Prolog运算符是围绕正常序言术语的语法糖。表达式3 * 2 + 1被解析为术语'+'('*'(3,2),1)

  • 内置谓词=..将一个术语分解为一个列表,其中的头部是仿函数,其尾部包含作为原始参数的[未分解]术语。术语

  • 内置谓词functor/3将一个术语与其仿函数和arity统一起来。

  • 您可能还想查看arg/3,它提供了通过序号位置检查指定术语的参数的方法。

现在你知道了,一个相当简单的递归解决方案应该出现。如果你需要考虑所需运算符的arity,它会更复杂(但不是很多)。