【问题标题】:assigning to arg inside function definition?分配给函数定义内的arg?
【发布时间】:2016-04-01 17:45:13
【问题描述】:

试图阅读一些旧的 BASIC 代码来做一个移植,并遇到了这个令人费解的概念:

1150 DEF FNB(Q)=Q+8*((Q=9)-(Q=0))

这里……发生了什么事?你怎么能分配给这样的参数?为什么这不等同于Q+8*(9-0)

我写了一个小演示来调查,但它没有产生任何我期望的结果:

10 DEF FNB(Q)=Q+8*((Q=9)-(Q=0))
20 PRINT FNB(1)
30 PRINT FNB(2)
20 PRINT FNB(3)
30 PRINT FNB(10)
RUN
 1
 2
 3
 10
Ok

我一定是做错了什么,因为FNB 不能是一个身份函数。

有人能解释一下 BASIC 在这个函数中实际做了什么吗?为什么我的演示没有帮助?

【问题讨论】:

    标签: basic gw-basic


    【解决方案1】:

    啊,我刚收到。

    这不是函数内部的赋值,这是一个相等测试!

    如果它们相等,则返回 -1 (为什么...),否则返回 0。

    例如:

    10 print 9=9
    20 print 9=8
    RUN
    -1
     0
    Ok
    

    伙计,自从我使用一种使用= 来表示平等的语言以来,已经很长时间了......

    【讨论】:

    • -1 = NOT 0(即按位NOT,例如0b111 = NOT 0b000)。至于为什么这样做,我不知道,除了可能是一些现在已经失传的古老效率原因。我不确定 Visual Basic(较新的 .NET 兼容版本)是否也使比较结果等于 0 或 -1 之一。顺便说一句,用于赋值和相等测试的 = 字符是大多数 BASIC 方言的特征,我只能假设它仍然是。
    • 啊,0的位翻转!这是有道理的,在一个老派的心态。 GW-BASIC 是我曾经涉足过的唯一方言,而且自从我 13 岁时就开始了,早在 90 年代初。我没有了解这个问题的答案,而是突然想起了它。 :)
    • 我很幸运能够使用 QBASIC 作为我的第一个 BASIC 语言之一,这是对 GW-BASIC 的显着改进,具有适当的子过程和功能 à la Pascal(尽管 DEF FNxxx 和 @ 987654328@/RETURN 仍然可用)。不管怎样,我很高兴你能记住现在很多人觉得很奇怪的语法。 :)
    猜你喜欢
    • 2017-01-21
    • 2015-05-10
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2018-10-25
    • 1970-01-01
    相关资源
    最近更新 更多