1
我试着理解序言。我想给输入:转换(S(S(S(X))),Y)和输出应该是Y = 3返回整数与Prolog
convert(s(0), 1).
convert(s(s(0)), 2).
convert(s(X),Y) :- convert(X,Y is (Y+1)).
这些都是我的规则的权利,但只有输入: convert(s(0),1)。并且 convert(s(s(0)),2)。工作。转换(s(s(0)),2)。如果我的递归会正常工作,我不需要规则:convert(s(s(0)),2)。 有人可以帮我解决这个问题吗?
电贺
感谢,它的工作原理!但为什么重要的是给一个像R这样的大写字母: convert(s(X),R) 但为什么不是convert(s(X),r)工作? – Runner
@Runner:因为变量以大写字母开头,所以常量是小写字母。这不是一个惯例(所以不这样做会使程序不正确)。如果不想听起来令人讨厌或者类似的话,或许你应该查看关于Prolog的一些基础知识。 –
虽然正确,但您的clpfd版本效率极低,因为它需要很多临时变量。那么高效版本呢?啊,和s(X)的确如此。 – false