2016-04-01 5 views
0

Der Versuch, einige alte BASIC-Code zu lesen, einen Port zu tun, und über diese knifflige Konzept kommt:Zuweisung zu arg innerhalb der Funktionsdefinition?

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

Was ... ist hier los? Wie können Sie dem Parameter so zuweisen? Warum entspricht das nicht Q+8*(9-0)?

Ich schrieb eine kleine Demo zu untersuchen, aber es hat nichts ergeben, die ich erwartet hatte:

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 

ich etwas falsch sein muss, weil FNB keine Identitätsfunktion sein kann.

Kann jemand erklären, was BASIC tatsächlich in dieser Funktion macht? Und warum ist meine Demo nicht hilfreich?

Antwort

0

Argh, ich habe es gerade.

Das ist nicht Zuweisung innerhalb der Funktion, es ist ein Gleichheitstest!

Wenn sie gleich sind, gibt sie -1 zurück (warum ...), sonst 0.

Zum Beispiel:

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

Man, es ist schon eine lange Zeit, seit ich benutzte eine Sprache, die = für die Gleichheit verwendete ...

+0

'-1 = NOT 0' (das ist ein bitweises' NOT', zB '0b111 = NOT 0b000'). Warum es so gemacht wurde, ich habe keine Ahnung, außer vielleicht einem alten Effizienzgrund, der jetzt für die Ewigkeit verloren ist. Ich bin nicht sicher, ob Visual Basic (die neueren .NET-kompatiblen Versionen) auch die Ergebnisse von Vergleichen gleich 0 oder -1 macht. Übrigens war das Zeichen '=', das sowohl für die Zuweisung als auch für die Gleichheitsprüfung verwendet wurde, ein Merkmal der meisten BASIC-Dialekte, und ich kann nur annehmen, dass es immer noch so ist. –

+0

Ah, ein Bitflip von 0! Das macht Sinn, in einer Denkweise der alten Schule. GW-BASIC ist der einzige Dialekt, in dem ich je gekämpft habe, und nicht seit ich 13 war, damals in den frühen 90ern. Ich habe die Antwort darauf nicht gelernt, sondern mich plötzlich daran erinnert. :) –

+0

Ich hatte das Glück, QBASIC als eine meiner ersten BASIC-Sprachen verwenden zu können, was eine bemerkenswerte Verbesserung gegenüber GW-BASIC mit entsprechenden Subprozeduren und Funktionen à la Pascal war (obwohl 'DEF FNxxx' und' GOSUB'/' RETURN' waren noch verfügbar). Wie auch immer, ich bin froh, dass du dich an die Syntax erinnert hast, die heutzutage vielen Leuten seltsam erscheint. :) –