Πέμπτη, 27 Δεκεμβρίου 2018

Revision 10 Version 9.6

I am back in my home in Preveza (Greece), and so we have a new revision.
First a fix done for Stack$() the function to put strings and numbers in a string which can be move to a stack using the Stack statement. Now we can place boolean type and negative numbers (this was a bug).
In the example below, we have three items for a$, a string. First item is a string, second item is a boolean (all comparisons return boolean type), and third is a negative number.

a$=stack$("hello", 3=3, -1)
Stack a$
Print len(a$)=0
Read b$,c, d
Print b$,c, d
Print type$(c)="Boolean"

Second I had an idea before my journey to Athens, so now with little work, works: If we have an inventory type of list as queue, which means we may have same keys, without loosing the priority as we append them (because we can't delete from any position but from the last, using Drop, to drop a number of last keys which we had append to list), we can iterate through same keys.

An inventory list has an array of items and a hash table for keys. When two keys have the same return from hash function they exist in one place in hash table and they maintain a linked list, from the last, so every time Exist() function find the last and return. So now the third parameters if is a negative say to Exist to skip every match until that number get zero. When the third parameter is zero we just increase its value and statements inside Exist() function get that number to return the number of matches for specific key. When we use positive number, say 1, we have to find from the first,  but because the list start from the last, the easy way internal is to find the total and change the parameter to the right negative number.

The code below now is in the help file (the mdb file, which open using Help statement)

a=queue:=1,2:="2A",2:="2B",3,4:="4A",4:="4B",5, 2:="3B"
m=each(a)
\\ $(4) for using proportional printing
Print $(4),"value as string", @(tab(2)),"position - 0 based", @(tab(4)),"key as string in quote"
Print $(0),

While m {
      Print eval$(m), @(tab(2)), eval(m!),@(tab(4)),quote$(eval$(m, m^))
}
\\ new optional parameter for Exist() function
\\ with parameter 0 we get the number of items with same key
Print exist(a,2, 0)=3 ' true
\\ using positive we get the 1st for 1
If exist(a,2,1) Then Print eval$(a)="2A"  ' true
\\ using negative we get last for -1
If exist(a,2,-3) Then Print eval$(a)="2A"  ' true

Print exist(a,4,0)=2
\\ we can iterate same keys using a for loop, and the exist with the third parameter
for i=-exist(a,4,0) to -1
      if exist(a,4, i) then Print eval$(a), ' we get 4A 4B
next i
Print

And this is the same with Greek statements:

α=ουρά:=1,2:="2α",2:="2β",3,4:="4α",4:="4β",5, 2:="3β"
μ=Κάθε(α)
Τύπωσε $(4),"τιμή ως αλφαριθμητικό",@(στήλη(2)), "θέση - από το μηδέν",@(στήλη(4)),"κλειδί σε εισαγωγικά"
Τύπωσε $(0),
Ενώ μ {
      Τύπωσε εκφρ$(μ),@(στήλη(2)), εκφρ(μ!),@(στήλη(4)), παράθεση$(εκφρ$(μ, μ^))
}
\\ νέα παράμετρος για την συνάρτηση Υπάρχει() όταν έχουμε πρώτη παράμετρο ουρά (είδος κατάστασης)
\\ με τιή 0 μας επιστρέφει τον αριθμό στοιχείων (ή 0 αν δεν υπάρχουν) με το ίδιο κλειδί
\\ το κλειδί μπορεί να είναι αλφαριθμητικό  ή αριθμός  (εσωτερικά είναι αλφαριθμητικό)
Τύπωσε Υπάρχει(α,2, 0)=3 '  αληθές
\\ μια θετική τιμή δηλώνει θέση (αν δεν υπάρχει δίνει 0 αν υπάρχει δίνει -1)
Αν Υπάρχει(α,2,1) Τότε Τύπωσε εκφρ$(α)="2α"  '  αληθές

\\ μια αρνητική τιμή δίνει θέση από το τέλος, με -1 το τελευταίο με το ζητούμενο κλειδί
\\ και εδώ επιστρέφει 0 αν δεν υπάρχει ή -1
Αν Υπάρχει(α,2,-3) Τότε Τύπωσε εκφρ$(α)="2α"  ' αληθές

Τύπωσε Υπάρχει(α,4,0)=2
\\ σε συνδυασμό με την Για μπορούμε να δούμε όλα τα στοιχεία με το ίδιο κλειδί
Για ι=-Υπάρχει(α,4,0) έως -1
      Αν Υπάρχει(α,4, ι) Τότε Τύπωσε εκφρ$(α), ' we get 4α 4β
Επόμενο ι
Τύπωσε

Third:|
Git now has the 10 Revision. The 9th was not complete, because I miss an upload.

Τρίτο:
Διαπίστωσα ότι δεν είχα ανεβάσει στο git την 9η αναθεώρηση στην ολότητά της. Τώρα με την 10 ανέβηκαν όλα



Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου