Why is this in error?
-
- Manic Miner
- Posts: 205
- Joined: Thu Feb 22, 2018 3:27 pm
- Location: virginias eastern shore
- Contact:
Why is this in error?
LET x= (10,5)
I thought that the comma would maybe perform a math function? If not then why couldn't x equal a screen position I will later call.
The ? cursor flashes right after the 0 and before the comma so why doesnt it like the zero?
I thought that the comma would maybe perform a math function? If not then why couldn't x equal a screen position I will later call.
The ? cursor flashes right after the 0 and before the comma so why doesnt it like the zero?
Re: Why is this in error?
You cannot assign a pair of values to a variable. Variables can hold only a single number. So you need two variables, X and Y.
LET X=10
LET Y=5
(Actually in modern programming languages you have "objects" and "structures" and lot of different data types so something
similar to your goal would be possible. But I assume we talk about Spectrum Basic here).
LET X=10
LET Y=5
(Actually in modern programming languages you have "objects" and "structures" and lot of different data types so something
similar to your goal would be possible. But I assume we talk about Spectrum Basic here).
- Ast A. Moore
- Rick Dangerous
- Posts: 2641
- Joined: Mon Nov 13, 2017 3:16 pm
Re: Why is this in error?
Did you, by any chance, mean this?
This will return the attribute value at that screen position.
Code: Select all
LET x= ATTR (10,5)
Every man should plant a tree, build a house, and write a ZX Spectrum game.
Author of A Yankee in Iraq, a 50 fps shoot-’em-up—the first game to utilize the floating bus on the +2A/+3,
and zasm Z80 Assembler syntax highlighter.
Author of A Yankee in Iraq, a 50 fps shoot-’em-up—the first game to utilize the floating bus on the +2A/+3,
and zasm Z80 Assembler syntax highlighter.
-
- Manic Miner
- Posts: 205
- Joined: Thu Feb 22, 2018 3:27 pm
- Location: virginias eastern shore
- Contact:
Re: Why is this in error?
Thanks Ralf.
Ast.A.Moore I copied that line from an example of code Scottie put up at WoS. As per this:-
let res=AddThenSquare (10,5)
Then I tried to work out what it did
Best guess is it says ' Let the result equal Add then square 10 plus 5'
So that would be 10+5=15
15x15=225
Finally I tried entering it into Fuse and got that error which baffled me.
Ast.A.Moore I copied that line from an example of code Scottie put up at WoS. As per this:-
let res=AddThenSquare (10,5)
Then I tried to work out what it did
Best guess is it says ' Let the result equal Add then square 10 plus 5'
So that would be 10+5=15
15x15=225
Finally I tried entering it into Fuse and got that error which baffled me.
- Ast A. Moore
- Rick Dangerous
- Posts: 2641
- Joined: Mon Nov 13, 2017 3:16 pm
Re: Why is this in error?
Wait, I’m confused. Scottie gave an example in JavaScript and you’re trying to type it into the Sinclair BASIC interpreter? The syntax is completely different. I mean, you’ll need to either define a function, or spell it out right in the LET statement:llewelyn wrote: ↑Thu Aug 15, 2019 11:05 am I copied that line from an example of code Scottie put up at WoS. As per this:-
let res=AddThenSquare (10,5)
Then I tried to work out what it did
Best guess is it says ' Let the result equal Add then square 10 plus 5'
So that would be 10+5=15
15x15=225
Finally I tried entering it into Fuse and got that error which baffled me.
Code: Select all
LET x=(a+b)^2
Every man should plant a tree, build a house, and write a ZX Spectrum game.
Author of A Yankee in Iraq, a 50 fps shoot-’em-up—the first game to utilize the floating bus on the +2A/+3,
and zasm Z80 Assembler syntax highlighter.
Author of A Yankee in Iraq, a 50 fps shoot-’em-up—the first game to utilize the floating bus on the +2A/+3,
and zasm Z80 Assembler syntax highlighter.
-
- Manic Miner
- Posts: 205
- Joined: Thu Feb 22, 2018 3:27 pm
- Location: virginias eastern shore
- Contact:
Re: Why is this in error?
I know it was a stupid thing to do. I did it out of desperation because I wondered if the comma had some weird math function I was unaware of. Yes I knew it was JavaScript that Scotties example was in but still the math should be the same whatever the language?
- Ast A. Moore
- Rick Dangerous
- Posts: 2641
- Joined: Mon Nov 13, 2017 3:16 pm
Re: Why is this in error?
Well, it is. The syntax and structure, however, are completely different. He defined a new function and called it addThenSquare. The syntax implies that the function take two arguments in parentheses, separated by a comma:
Code: Select all
let res = addThenSquare(10,5)
The function itself is defined like this:
Code: Select all
function addThenSquare(n1, n2){
let result = n1 + n2;
result = result * result;
return result;
}
Code: Select all
LET res=(n1+n2)^2
Code: Select all
10 DEF FN a(x,y)=(x+y)^2
20 LET res= FN a(10,5)
30 PRINT res
Code: Select all
10 DEF FN a(x,y)=(x+y)^2
20 PRINT FN a(10,5)
Every man should plant a tree, build a house, and write a ZX Spectrum game.
Author of A Yankee in Iraq, a 50 fps shoot-’em-up—the first game to utilize the floating bus on the +2A/+3,
and zasm Z80 Assembler syntax highlighter.
Author of A Yankee in Iraq, a 50 fps shoot-’em-up—the first game to utilize the floating bus on the +2A/+3,
and zasm Z80 Assembler syntax highlighter.
-
- Manic Miner
- Posts: 205
- Joined: Thu Feb 22, 2018 3:27 pm
- Location: virginias eastern shore
- Contact:
Re: Why is this in error?
You are a good man Mr Moore for bothering to explain things in detail so that I can understand them and I really appreciate it. Thank you.
I must find some way to save and index all the advice people so kindly dispense for my benefit because I'm feeling like a bit of Basic might not go amiss, if only to keep my brain from seizing up! Some of these tips are absolutely invaluable.
The above sincere thanks applies to everyone else who has offered advice & encouragement.
I must find some way to save and index all the advice people so kindly dispense for my benefit because I'm feeling like a bit of Basic might not go amiss, if only to keep my brain from seizing up! Some of these tips are absolutely invaluable.
The above sincere thanks applies to everyone else who has offered advice & encouragement.
- 1024MAK
- Bugaboo
- Posts: 3123
- Joined: Wed Nov 15, 2017 2:52 pm
- Location: Sunny Somerset in the U.K. in Europe
Re: Why is this in error?
The BASIC programming language likes things to be built from simple building blocks (*).
Mark
* Note, but more human friendly than assembly language / machine code.
Mark
* Note, but more human friendly than assembly language / machine code.
Standby alert
“There are four lights!”
Step up to red alert. Sir, are you absolutely sure? It does mean changing the bulb
Looking forward to summer later in the year.
“There are four lights!”
Step up to red alert. Sir, are you absolutely sure? It does mean changing the bulb
Looking forward to summer later in the year.
Re: Why is this in error?
When you get into the habit of forever writing:
x = my_function(a, b)
It's easy to overlook the fact that no-one seems to have written a language with - surely - the obvious syntax:
(x, y) = my_function(a, b, c, d)
Such that a function can return more than one value.
C has lots of ways around this issue (you can define 'x' as a structure (or template) made up of two variables, and the function can return a matching structure; or you can make one of the parameters a pointer to where your variable is stored in memory, so the function can manipulate it directly) but it doesn't have a simple syntax to express it like this.
x = my_function(a, b)
It's easy to overlook the fact that no-one seems to have written a language with - surely - the obvious syntax:
(x, y) = my_function(a, b, c, d)
Such that a function can return more than one value.
C has lots of ways around this issue (you can define 'x' as a structure (or template) made up of two variables, and the function can return a matching structure; or you can make one of the parameters a pointer to where your variable is stored in memory, so the function can manipulate it directly) but it doesn't have a simple syntax to express it like this.
Re: Why is this in error?
Python supports this syntax. The following programme:
Code: Select all
def my_function(a, b, c, d):
return a + b, c + d
x, y = my_function(1, 2, 3, 4)
print(x)
print(y)
Although such a syntactic sugar is nice, you can also see in this example that you don't have to declare variables explicitly, with their types. Not a language for me.3
7
-
- Manic Miner
- Posts: 205
- Joined: Thu Feb 22, 2018 3:27 pm
- Location: virginias eastern shore
- Contact:
Re: Why is this in error?
Oh, thats rather nice because for once I could follow it without needing someone to explain it to me! It's a little odd in terms of how the English language would state that but its understandable which is more than can be said for most languages. I've had Python recommended to me by several people including my son who's my guru, he was a Navy radar tech. He just wishes I'd let go of ZXBasic but now after all these years I just couldn't. Its so cute and cuddly!
Re: Why is this in error?
C# has had exactly that syntax for ages. The return type is a Tuple, but you can automatically deconstruct a Tuple into multiple fields. So if you have a function like:Joefish wrote: ↑Fri Aug 16, 2019 7:10 pm When you get into the habit of forever writing:
x = my_function(a, b)
It's easy to overlook the fact that no-one seems to have written a language with - surely - the obvious syntax:
(x, y) = my_function(a, b, c, d)
Such that a function can return more than one value.
C has lots of ways around this issue (you can define 'x' as a structure (or template) made up of two variables, and the function can return a matching structure; or you can make one of the parameters a pointer to where your variable is stored in memory, so the function can manipulate it directly) but it doesn't have a simple syntax to express it like this.
(int Left, int Right) my_function(int a, int b)
{
return (b,a);
}
Then you can do
int x;
int y;
(x,y) = my_function(3,4)
Or even
var (x,y) = my_function(3,4)
To get the results into two variables x and y, or instead deal with the result as a whole thing, such as:
var t = my_function(3,4)
Console.Writeline($"Left value is {t.Left}, Right value is {t.Right}")
It's a super handy feature, as you can flit between the two representations as and when it makes sense.
Re: Why is this in error?
It's also available as a language feature in C++: https://en.cppreference.com/w/cpp/langu ... ed_binding
- 1024MAK
- Bugaboo
- Posts: 3123
- Joined: Wed Nov 15, 2017 2:52 pm
- Location: Sunny Somerset in the U.K. in Europe
Re: Why is this in error?
One important consideration to think about is where technology was when BASIC was formed. Before microprocessors (like the 8080, 6502 and Z80) became available in quantity at relatively low prices, typically BASIC programs were run on mainframe or mini computers that had multiple users connected to them via ‘dumb’ text terminals.llewelyn wrote: ↑Fri Aug 16, 2019 11:07 pm Oh, thats rather nice because for once I could follow it without needing someone to explain it to me! It's a little odd in terms of how the English language would state that but its understandable which is more than can be said for most languages. I've had Python recommended to me by several people including my son who's my guru, he was a Navy radar tech. He just wishes I'd let go of ZXBasic but now after all these years I just couldn't. Its so cute and cuddly!
Unless you had your own access, user BASIC programs would be submitted on punched cards, or on programming forms. Then they would be entered as part of a batch job. As an end user, you got a copy of the resulting line printer print out.
Then when BASIC was written for the common microprocessors (like the 8080, 6502 and Z80), because the cost of ROM and RAM was expensive, the size and complexity of the interpreter (language) had to be kept small.
The ZX80 only had a 4Kbyte ROM, the ZX81 had a 8Kbyte ROM and the BASIC ROM in a ZX Spectrum is a 16Kbyte ROM. And even then, the relevant programmer(s) that wrote the code for the BASIC that these machines use, used every trick they could think of to try to cram as much functionality in as they could.
BASIC was also based on even older computer languages.
So now hopefully you can see why there are lots of limitations in BASIC compared to more modern languages. Let alone compared to the (very inexact and vague) English language.
And to this day, we humans still manage to continue to debate what is the best way, and hence there are differences in languages, syntax and symbols even in English text and in mathematics. Just look at how many ways there are of writing the date...
Mark
Standby alert
“There are four lights!”
Step up to red alert. Sir, are you absolutely sure? It does mean changing the bulb
Looking forward to summer later in the year.
“There are four lights!”
Step up to red alert. Sir, are you absolutely sure? It does mean changing the bulb
Looking forward to summer later in the year.
-
- Manic Miner
- Posts: 205
- Joined: Thu Feb 22, 2018 3:27 pm
- Location: virginias eastern shore
- Contact:
Re: Why is this in error?
So now hopefully you can see why there are lots of limitations in BASIC compared to more modern languages. Let alone compared to the (very inexact and vague) English language.
And to this day, we humans still manage to continue to debate what is the best way, and hence there are differences in languages, syntax and symbols even in English text and in mathematics. Just look at how many ways there are of writing the date... Mark
I watched a very interesting lecture by 'Uncle' Bob Martin on structured programming, here's one of his, NOT the one I refer to:- https://www.youtube.com/watch?v=Z5p5r9FWrpU
I mention this because a point that he stressed was the dismal reality of there being so many programming languages whereas ideally, there should be one that covered all the bases. The reason I quoted your text is because in my opinion English (and therefore an ideal form of Basic) is a perfect example of a flexible language which you accuse of being 'inexact and vague'! Its probably the ONLY language in which gender, tense, verb/noun order don't really matter. There's a good reason why this is so because English is a pidgin itself. Which is why its easier to get ideas over to non-native speakers, or more likely vice versa.
I would suggest that the ideal computer language would have similar properties. I've been developing this argument for several years because I truly believe it has validity. Basic for all its sins and imperfections does at least have some of English's properties in that you can get something to work for you in several ways, some really clumsy, some very compact BUT the virtue lies in that flexibility. I'm going to address this in my blog at greater length but I have found some support for the concept which was encouraging.
And to this day, we humans still manage to continue to debate what is the best way, and hence there are differences in languages, syntax and symbols even in English text and in mathematics. Just look at how many ways there are of writing the date... Mark
I watched a very interesting lecture by 'Uncle' Bob Martin on structured programming, here's one of his, NOT the one I refer to:- https://www.youtube.com/watch?v=Z5p5r9FWrpU
I mention this because a point that he stressed was the dismal reality of there being so many programming languages whereas ideally, there should be one that covered all the bases. The reason I quoted your text is because in my opinion English (and therefore an ideal form of Basic) is a perfect example of a flexible language which you accuse of being 'inexact and vague'! Its probably the ONLY language in which gender, tense, verb/noun order don't really matter. There's a good reason why this is so because English is a pidgin itself. Which is why its easier to get ideas over to non-native speakers, or more likely vice versa.
I would suggest that the ideal computer language would have similar properties. I've been developing this argument for several years because I truly believe it has validity. Basic for all its sins and imperfections does at least have some of English's properties in that you can get something to work for you in several ways, some really clumsy, some very compact BUT the virtue lies in that flexibility. I'm going to address this in my blog at greater length but I have found some support for the concept which was encouraging.
- Einar Saukas
- Bugaboo
- Posts: 3139
- Joined: Wed Nov 15, 2017 2:48 pm
Re: Why is this in error?
Python, Perl, Lua, Go, ...
- Einar Saukas
- Bugaboo
- Posts: 3139
- Joined: Wed Nov 15, 2017 2:48 pm
Re: Why is this in error?
Yes, but it's not really a natural language feature, more like a hack. It requires some extra "plumbing" to declare such methods in C++.djnzx48 wrote: ↑Sat Aug 17, 2019 7:31 am It's also available as a language feature in C++: https://en.cppreference.com/w/cpp/langu ... ed_binding
- 1024MAK
- Bugaboo
- Posts: 3123
- Joined: Wed Nov 15, 2017 2:52 pm
- Location: Sunny Somerset in the U.K. in Europe
Re: Why is this in error?
The reason why I describe English as very inexact and vague, is because of it’s flexibility. There are many variations of meanings and words, and expressions just in the U.K., plus various more used around the world.
Humans also love to miss out, or add words to sentences. Or use slang or abbreviations.
And often, you need to have worked out the context of what has been said/written before it’s possible to work out the meaning.
Combined, this makes it rather hard work for a simple logical machine (which is all computers are, they are just really, really fast) to try to work out what a human actually means.
For example, what would a computer make of this expression “let’s see the colour of your money?”
Do you know what it means?
A programming language has to have clear rules and a clear syntax. And must be able to be decoded into logical instruction steps. All decisions ultimately come down to a binary choice (yes/no, on/off etc...).
And there is one big choice facing the people that design a computer language. Do you design it so that it is easier for the computer to translate to its native machine code (that the microprocessor can read directly, so on the ZX Spectrum, that’s Z80 machine code). This is generally called a low level language.
Or do you design it so that it is more human friendly (the requirement for BASIC), but which takes more time for the computer to decode before it can work out what machine code instructions are needed to preform the requested function (hence is part of the reason that BASIC is slow). This is generally called a high level language.
Mark
Humans also love to miss out, or add words to sentences. Or use slang or abbreviations.
And often, you need to have worked out the context of what has been said/written before it’s possible to work out the meaning.
Combined, this makes it rather hard work for a simple logical machine (which is all computers are, they are just really, really fast) to try to work out what a human actually means.
For example, what would a computer make of this expression “let’s see the colour of your money?”
Do you know what it means?
A programming language has to have clear rules and a clear syntax. And must be able to be decoded into logical instruction steps. All decisions ultimately come down to a binary choice (yes/no, on/off etc...).
And there is one big choice facing the people that design a computer language. Do you design it so that it is easier for the computer to translate to its native machine code (that the microprocessor can read directly, so on the ZX Spectrum, that’s Z80 machine code). This is generally called a low level language.
Or do you design it so that it is more human friendly (the requirement for BASIC), but which takes more time for the computer to decode before it can work out what machine code instructions are needed to preform the requested function (hence is part of the reason that BASIC is slow). This is generally called a high level language.
Mark
Standby alert
“There are four lights!”
Step up to red alert. Sir, are you absolutely sure? It does mean changing the bulb
Looking forward to summer later in the year.
“There are four lights!”
Step up to red alert. Sir, are you absolutely sure? It does mean changing the bulb
Looking forward to summer later in the year.