我是prolog的新手,我正在尝试写一个包含以下内容的谓词:
给出时,谓词名称为s2int:
等等..
这是我试图写的(非常糟糕),
起初我尝试了这段代码:
s2intAux(0,Y).
s2intAux(X,Y):- X = s(Z) ,Y1 is Y+1, s2intAux(Z,Y1).
但是每当我尝试通过键入s2intAux(s(0),Y)来运行它时,我都会收到一条错误消息:“ERROR:is / 2:参数没有被充分实例化”
我很好地得到了这个错误,因为Y是不确定的。
然后我尝试了这个:
s2intAux(0,Y).
s2intAux(X,Y):- X = s(Z) ,Y1 is Y+1, s2intAux(Z,Y1).
s2int(X,Y):- Y1 is 0, s2intA(X,Y1).
(我试图以零开头的Y,但这个根本不起作用)
我已经被困了几个小时,这就是为什么我转向你们的原因,请帮忙!
谢谢。
最佳答案
您需要采取以下措施解决最简单的情况:
s2intAux(0,0).
当Y实例化为0时,这将导致
s2intAux(0,Y)
为true。在接下来的几行中,当您用完
Z
时,没有将s(.)
解析为0的语句。为此,您需要注意单个s(0)
情况。然后,您可以执行一般情况:s2intAux(X,Y) :- X = s(0), Y is 1.
s2intAux(X,Y) :- X = s(Z), s2intAux(Z,Y1), Y is Y1 + 1.
请注意,在一般情况下,我们必须先遍历才能到达
Y is 1
,然后才能展开备份并最终分配Y to Y1 + 1
。您还可以将第一行写为:
s2intAux(s(0),Y) :- Y is 1.
最终答案如下所示:
s2intAux(0,0).
s2intAux(s(0),Y) :- Y is 1.
s2intAux(X,Y) :- X = s(Z), s2intAux(Z,Y1), Y is Y1 + 1.
关于prolog - 基本的PROLOG计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16778782/