2016-04-01 72 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'仍然可用)。無論如何,我很高興你記得現在很多人看起來很奇怪的語法。 :) –