如果N - 1是一个自然数,如何告诉prolog N是一个自然数?

时间:2017-03-23 00:38:23

标签: prolog

我是Prolog的新手,我正在尝试做一个简单的递归示例。 我的KB是:

    natural(0).
    natural(n) :- natural(n - 1).

然后我的查询是:

    natural(1). 

答案是错误的。

根据我的阅读,Prolog中的数字是常量,如'book',这可能是 导致问题,但我不知道如何解决它。

非常感谢任何帮助。谢谢!

2 个答案:

答案 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).

适用于测试和生成自然数。