gpt4 book ai didi

prolog - 基本 PROLOG 计数

转载 作者:行者123 更新时间:2023-12-01 15:15:00 25 4
gpt4 key购买 nike

我是 prolog 的新手,我正在尝试编写一个谓词,其中包含以下内容:给定时谓词名称为 s2int:

  • s2int(0,Y) 它应该“返回”Y=0。
  • s2int(s(0),Y) => Y=1。
  • s2int(s(s(0)),Y) => Y=2。
  • s2int(S(s(s(0))),Y) => Y=3。

等等..这是我试图写的(非常糟糕),起初我试过这段代码:

s2intAux(0,Y).
s2intAux(X,Y):- X = s(Z) ,Y1 is Y+1, s2intAux(Z,Y1).

但每当我尝试通过键入 s2intAux(s(0),Y) 来运行它时,我都会收到一条错误消息:“错误: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) 为真。

在您的后续行中,当您用完 s(.) 时,您没有将 Z 解析为 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 before 我们可以展开备份并最终将 Y 分配给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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com