我是Prolog的新手,我正在尝试做一个简单的递归示例。 我的KB是:
natural(0).
natural(n) :- natural(n - 1).
然后我的查询是:
natural(1).
答案是错误的。
根据我的阅读,Prolog中的数字是常量,如'book',这可能是 导致问题,但我不知道如何解决它。
非常感谢任何帮助。谢谢!
答案 0 :(得分:2)
你应该这样做:
natural(0).
natural(N) :- M is N - 1, natural(M).
Prolog不是一种命令式语言,自然不是一种功能。 这里发生的是我用N - 1统一M,然后看M是否自然。
因此,转换为命令式,is
用于分配。
还要记住,变量必须以大写字母开头,小写字母则以“常量”开头。
答案 1 :(得分:1)
在 SWI-Prolog 中,
nat(N) :- between(0, infinite, N).
适用于测试和生成自然数。