我是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但是这个根本没有工作) 我已经被困了几个小时了,这就是我转向你们的原因,请帮忙! 谢谢。
答案 0 :(得分:2)
您需要以下内容来解决最简单的案例:
s2intAux(0,0).
当Y被实例化为0时,这将导致s2intAux(0,Y)
为真。
在后续行中,当您用尽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.