Compounded Let statments

Posts: 27

Joined: Tue Dec 06, 2016 1:23 am

Compounded Let statments

Hello,

I've noticed that somthing that is possible is Sinclair Basic doesn't seem possible in Boriel....

eg:

Sinclair Basic

10 LET x=0
20 LET x=x+1-(50 AND x=50)
30 PRINT AT 0,0;x,
40 GOTO 20

As you can see x=x+1 will increment minus 0 unless x=50 then it will subtract 50. Great for loops and counters. In ZXB I am having to expand this into IF THEN statements.

x=0
x=x+1
myloop:
IF x=50 THEN
x=0
END IF
Print at 0,0;x,
GOTO myloop

Posts: 1500

Joined: Wed Nov 01, 2006 6:18 pm

Location: Santa Cruz de Tenerife, Spain

Re: Compounded Let statments

True
I didn't know this behaviour.

anyway, the fastest way to this is:
Code:
`DIM x AS Byte = 0myloop:x=(x+1) MOD 50PRINT AT 0,0;x,GOTO myloop`

Posts: 27

Joined: Tue Dec 06, 2016 1:23 am

Re: Compounded Let statments

It is mentioned very briefly in the ZX Basic manual, http://www.worldofspectrum.org/ZXBasicM ... hap13.html

But turns out to be far more useful. See this program that creates the +2 test screen :

10 FOR l=0 TO 21 : FOR i=7 to 0 STEP -1 : PRINT INK (l and l<8); PAPER i;("19" AND l<8); (" " AND l>= 8 ) ; BRIGHT 1; ("86" AND l<8); (" " AND l>=8);: NEXT i : NEXT l

You can see a live version of it here :
Run demo

Posts: 1500

Joined: Wed Nov 01, 2006 6:18 pm

Location: Santa Cruz de Tenerife, Spain

Re: Compounded Let statments

Ok. I see.
I'll try to implement that, but with only in "--sinclair" mode. Otherwise bool comparisons will be slower

Perhaps it would be better to implement the ? : operator like in C??
What do you people think?

Posts: 9

Joined: Tue May 12, 2015 5:09 pm

Re: Compounded Let statments

boriel wrote:Perhaps it would be better to implement the ? : operator like in C??

I think that is a good idea, it could help to do more readable the code.

Posts: 777

Joined: Mon Apr 27, 2009 7:26 pm

Location: Slough, Berkshire, UK

Re: Compounded Let statments

Just following up a few threads. Not sure if this got implemented. It's a /very/ common way to do things like keys:

Code:
`LET x=x+(Inkey\$="P")-(Inkey\$="O")`

And depends on the fact that in Sinclair basic, False equates to zero and true equates to 1. This is not stricktly speaking true in Boriel's Basic. It probably should work in sinclair mode.

Perhaps

Code:
`x=x+(SGN (key="p") - (SGN (key="o")) `

might be the same logical result, given false=0 and I think true is > 0 ?

Posts: 1500

Joined: Wed Nov 01, 2006 6:18 pm

Location: Santa Cruz de Tenerife, Spain

Re: Compounded Let statments

Or using --strict-boolean which ensures true is always 1 (with a little performance overhead). Anyway, boolean operations where slightly optimized upon 1.7.x+
So even without --strict-boolean many of them returns 1 for true.

Who is online

Users browsing this forum: No registered users and 1 guest