Search code examples
basicgw-basic

assigning to arg inside function definition?


Trying to read some old BASIC code to do a port, and coming across this mind-bending concept:

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

What... is going on here? How can you assign to the parameter like that? Why isn't this equivalent to Q+8*(9-0)?

I wrote a little demo to investigate, but it didn't yield anything that I expected:

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

I must be doing something wrong, because FNB can't be an identity function.

Can someone explain what BASIC is actually doing in this function? And why my demo isn't being helpful?


Solution

  • Argh, I just got it.

    That's not assignment inside the function, it's an equality test!

    If they are equal, it returns -1 (why...), else 0.

    For example:

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

    Man, it's been a long time since I used a language that used = for equality...