2016-04-01 52 views
0

想读一些旧的BASIC代码做一个端口,碰到这个令人费解的概念来:在函数定义里分配给arg?

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实际上在这个功能中做了什么?为什么我的演示没有帮助?

回答

0

啊,我刚刚得到它。

这不是赋值里面的函数,它是一个平等测试!

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

例如:

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

人来说,这是一个很长时间因为我使用=等于的语言...

+0

“-1 = NOT 0”(即按位“NOT”,例如“0b111 = NOT 0b000”)。至于为什么这样做,我不知道,除了一些古老的效率原因,现在已经失传了。我不确定Visual Basic(更新的.NET兼容版本)是否也使得比较结果等于0或-1。顺便说一句,用于赋值和相等性测试的'='字符是大多数BASIC方言的特征,我只能假设它仍然是。 –

+0

啊,一个0的bitflip!这是有道理的,在老派的心态。 GW-BASIC是我所涉及的唯一一种方言,而不是因为我早在90年代就已经13岁了。我没有*学习*这个答案,而是突然想起它。 :) –

+0

我很幸运,能够使用QBASIC作为我的第一个BASIC语言之一,这是GW-BASIC的一个显着改进,具有适当的子程序和函数àla Pascal(尽管'DEF FNxxx'和'GOSUB'/RETURN'仍然可用)。无论如何,我很高兴你记得现在很多人看起来很奇怪的语法。 :) –