我正在尝试使用以下内容构建减法,加法,除法,乘法和其他操作:
使用以下规则,可以直接实现这样的添加(添加):
ADD (x, y) {
loop X {
y = incr (y)
}
return y
}
但是,我正在努力实施减法。我认为所有其他所需的操作都可以使用减法完成。
任何提示都将非常受欢迎。
答案 0 :(得分:9)
Stephen Cole Kleene设计了一种使用整数加法执行整数减法的方法。但是,它假定您不能有负整数。例如:
$('.site-header').outerHeight(true); // With vertical margins included.
在您的问题中,您使用增量操作实现了添加操作。
类似地,您可以使用递减操作实现减法操作,如下所示:
0 - 1 = 0
1 - 1 = 0
2 - 1 = 1
3 - 1 = 2
4 - 1 = 3
5 - 2 = 3
6 - 3 = 3
6 - 4 = 2
6 - 5 = 1
6 - 6 = 0
6 - 7 = 0
现在,我们需要做的就是实现减量操作。
这是Kleene的风格所在:
sub(x, y) {
loop y
{ x = decr(x) }
return x
}
我们已经使用了所有这四项操作。这是它的工作原理:
我们有两个基本案例,decr(x) {
y = 0
z = 0
loop x {
y = z
z = incr(z)
}
return y
}
(y
的基本情况)和0
(z
的基本情况):
1
因此,我们将它们初始化为y = 0 - 1 = 0
z = 1 - 1 = 0
。
当0
为x
时,我们会循环0
次(即从不),然后我们只返回0
。
当y = 0
为x
时,我们会运行一次循环,指定1
,然后返回y = z
。
请注意,每次运行循环y = z = 0
都会保存当前迭代的结果,而y
保存下一次迭代的结果。这就是我们需要两个基本案例的原因。递减函数不是连续函数。这是一个piecewise函数:
z
当克莱恩去看牙医并且牙医拔出他的两颗牙齿时,他意识到了这一点。他在试图解决这个问题时感到很沮丧,当牙医拔出两颗牙齿时,他意识到他需要两个基础病例。