这是什么样的BASIC语言?

4

我完全预计会收到负评,但这让我非常好奇,希望至少有人能回答。我们的离散数学教授非常喜欢古老语言,因为它们提供了大量位运算符。现在,他给我们布置了一项作业,要确定以下BASIC语句的输出:

PRINT (NOT (15 OR 51) EQV 85) IMP (15 AND 51)

我已经找到了解决方案,我非常确定它应该输出-105,但是为了确保,我想编译一下它。然后我发现我遇到了一个问题。我不知道这是什么样的BASIC语言!原始BASIC语言的编译器无法编译它。QBasic编译器也无法编译它。即使我将其修改为我认为符合VB.NET语法的形式,VB.NET编译器也无法编译它,如下所示:

Console.WriteLine((NOT (15 OR 51) EQV 85) IMP (15 AND 51))

问题是:是否有一种BASIC排序或方言可以编译具有此语句的程序?如果有,是哪种?

据我所知,EQV()相当于NOT(XOR()),而IMP(X,Y)在X为真且Y为假时等于0。 - eoredson
6个回答

3
这在“原始”的Microsoft Visual Basic中可行。VB.NET版本并不完全兼容。
您可以尝试使用Microsoft Office中的Visual Basic for Applications来轻松实现此操作。实际上,表达式的结果为-105。我已经在Excel中使用了这段代码:
Cells(1, 1).Value = (Not (15 Or 51) Eqv 85) Imp (15 And 51)

可能还有其他的BASIC方言可以很好地运行 - PowerBASIC可能是其中之一,但我无法确认 :)

在不知道您的老师背景的情况下,确定确切的方言是棘手的 - 有很多这样的方言,而且许多方言非常相似。


1

对我来说,这似乎是一个VBA语法。

也许你可以在MS-Excel宏中尝试它。

Sub VBA_Function()
    Dim x
    x = (Not (15 Or 51) Eqv 85) Imp (15 And 51)
    Range("A1").Value = x
End Sub

1
也许你的教授特意以这种形式提出问题,挑战你通过分析解决问题,而非将代码输入编译器。这不是一个复杂的表达式。
如今,EQVIMP都不再是BASIC函数(微软一向保持向后兼容的承诺何在?)。
为了验证你的答案,你应该使用函数定义手动解决问题。
如果失败了,有趣的是,它仍然在VBA中得到支持。你可以在大多数MS Office套件应用程序中找到VBA。

0

因此,从您的方程式中删除EQV和IMP,并将其重建为:

REM modify boolean values:

PRINT (NOT (15 OR 51) EQV 85) IMP (15 AND 51)

REM removing EQV and IMP:

PRINT NOT (NOT (NOT (15 OR 51) XOR 85) AND NOT (15 AND 51))

解决你的问题。


0

BASIC布尔真值表的示例:

X EQV Y  Computes not xor
X IMP Y  Computes not(x and not y)

  Boolean truth tables:

      X | Not               X |  Y  |  Or         X |  Y  |  And
  -----------           -----------------     ------------------
      1 |  0                1 |  1  |  1          1 |  1  |   1
      0 |  1                1 |  0  |  1          1 |  0  |   0
                            0 |  1  |  1          0 |  1  |   0
                            0 |  0  |  0          0 |  0  |   0

      X |  Y  |  Xor        X |  Y  |  Imp        X |  Y  |  Eqv
  ------------------    ------------------    ------------------
      1 |  1  |   0         1 |  1  |   1         1 |  1  |   1
      1 |  0  |   1         1 |  0  |   0         1 |  0  |   0
      0 |  1  |   1         0 |  1  |   1         0 |  1  |   0
      0 |  0  |   0         0 |  0  |   1         0 |  0  |   1

看起来 IMP(X,Y) 等于 NOT(X AND NOT Y)。 - eoredson

0

额外的布尔真值表:

Where NOR is NOT OR, NON is NOT IMP, XAN is NOT AND

      X |  Y  |  Nor        X |  Y  |  Non        X |  Y  |  Xan
  ------------------    ------------------    ------------------
     -1 | -1  |   0        -1 | -1  |   0        -1 | -1  |   0
     -1 |  0  |   0        -1 |  0  |  -1        -1 |  0  |  -1
      0 | -1  |   0         0 | -1  |   0         0 | -1  |  -1
      0 |  0  |  -1         0 |  0  |   0         0 |  0  |  -1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接