我完全期待被否决,但这让我很好奇,我希望至少有人能回答。我们的离散数学教授非常喜欢旧语言,因为它们提供了过多的按位运算符。现在,他给了我们一个家庭作业,就是确定以下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语言可以用这种语句编译?如果是,哪个?
这适用于"原始"Microsoft Visual Basic。VB.NET版本并不完全兼容。
最简单的方法是使用Visual Basic for Applications,您可以在Microsoft Office中找到它。实际上,表达式的求值结果为-105
。我用过Excel的代码:
Cells(1, 1).Value = (Not (15 Or 51) Eqv 85) Imp (15 And 51)
可能还有其他基本方言也能很好地工作——PowerBASIC可能是其中之一,但我真的无法检查:)
在不了解老师背景的情况下,识别确切的方言很难——有很多,而且很多都很相似。
对我来说,这似乎是一种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
也许你的教授专门以这种形式提供了这个问题,作为分析解决问题的挑战,而不是将代码输入编译器。这不是一个复杂的表达。
两个EQV也不是IMP不再支持BASIC函数(MS总是向后兼容!)。
为了验证你的答案,你应该使用函数定义并手动求解。
如果做不到这一点,有趣的是,VBA仍然支持它。您可以在大多数MS Office套件应用程序中找到VBA。
其他布尔真值表:
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
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
因此,从等式中删除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))
解决您的问题。