栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

仅使用增量,循环,分配,零的关系运算

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

仅使用增量,循环,分配,零的关系运算

自然数集

N
在加法和减法下是封闭的:

N + N = NN - N = N

这意味着两个自然数的加法或减法也是自然数(考虑到

0 - 1
is
0
和not
-1
,我们不能有负自然数)。

但是,自然数集

N
在关系运算下不会关闭:

N < N = {0, 1}N > N = {0, 1}

这意味着比较两个自然数的结果是真实性(即

1
)或虚假性(即
0
)。

因此,我们将布尔值集(即

{0, 1}
)视为自然数的受限集(即
N
)。

false = 0true  = incr(false)

我们必须回答的第一个问题是“我们如何对

if
语句进行编码,以便我们可以基于真实性或虚假性进行分支?” 答案很简单,我们使用以下
loop
操作:

isZero(x) {    y = true    loop x { y = false }    return y}

如果循环条件为

true
(即
1
),则循环仅执行一次。如果循环条件为
false
(即
0
),则循环不会执行。我们可以用它来编写分支代码。

那么,我们如何定义关系运算呢?事实证明,所有内容都可以通过以下方式定义

lte

lte(x, y) {    z = sub(x, y)    z = isZero(z)    return z}

我们知道这

x ≥ y
与相同
y ≤ x
。因此:

gte(x, y) {    z = lte(y, x)    return z}

我们知道,如果

x > y
为真
x ≤ y
则为假。因此:

gt(x, y) {    z = lte(x, y)    z = not(z)    return z}

我们知道这

x < y
与相同
y > x
。因此:

lt(x, y) {    z = gt(y, x)    return z}

我们知道,如果

x ≤ y
y ≤ x
x = y
。因此:

eq(x, y) {    l = lte(x, y)    r = lte(y, x)    z = and(l, r)    return z}

最后,我们知道如果

x = y
为true,
x ≠ y
则为false。因此:

ne(x, y) {    z = eq(x, y)    z = not(z)    return z}

现在,我们需要做的就是定义以下功能:

  1. sub
    函数定义如下:

    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

    }

  2. not
    功能与该
    isZero
    功能相同:

    not(x) {y = isZero(x)return y

    }

  3. and
    功能与该
    mul
    功能相同:

    and(x, y) {z = mul(x, y)return z

    }

    mul(x, y) {
    z = 0
    loop x { z = add(y, z) }
    return z
    }

    add(x, y) {
    loop x
    { y = incr(y) }
    return y
    }

这就是您所需要的。希望有帮助。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485568.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号