Παρασκευή, 8 Δεκεμβρίου 2017

Αναθεώρηση 22 (Έκδοση 9.0)

Στη αυτή την αναθεώρηση έκανα αρκετά πράγματα
1. Δουλεύει καλύτερα το σύστημα με πολλές οθόνες. Η εντολή Παράθυρο 16, 0 έβαζε παλιά το παράθυρο (την φόρμα της κονσόλας) με 16άρια γράμματα, και το 0 ήταν το "συνθημαιικό" για πλήρη οθόνη. Τώρα το συνθηματικό παίζει να είναι 0 για την Νο 1 οθόνη, 1 για την νο 2 οθόνη κ.ο.κ.

2. Η μεταβλητή Παράθυρο (νέα) δίνει τον αριθμό της οθόνης στο επίπεδο που καλούμε την μεταβλητή αυτή, και δίνει 0 για την Νο 1 οθόνη. Μπορούμε να επιθεωρήσουμε την κατάσταση οθονών με την Monitor, η οποία υπάρχει μόνο στα αγγλικά, και  η λέξη δεν εννοεί την οθόνη, αλλά την παρακολούθηση εσωτερικών διακοπών, και άλλων στοιχείων του διερμηνευτή.

3.Ο επιλογέας αρχείων (είναι σε δυο εκδόσεις, η μια είναι για εικόνες με προεπισκόπηση) τώρα ταξινομεί με όνομα (όταν το ζητήσουμε από τις ρυθμίσεις του, οι τρεις παράλληλες γραμμές είναι το κουμπί για τις ρυθμίσεις, ή το Backspace), και όπου στο όνομα υπάρχουν αριθμοί, έχουν σημασία για την ρουτίνα ταξινόμησης. έτσι το alfa12 θα μπεί μετά από το alfa8, ενώ αν το ταξινομούσαμε με απλό τρόπο θα έμπαιναν αλλιώς.

4.Η Κατάσταση στην ταξινόμηση με αριθμό, τώρα μπορεί να έχει αλφαριθμητικά με αριθμούς σε πολλές θέσεις και όλοι μετράνε!(δες παράδειγμα παρακάτω).

μπορεί να ταξινομεί με πολλαπλά πεδία αριθμών στο κλειδί:
Εδώ έχουμε κλειδιά και πόλεις. ταξινομημένα!
KLM1234.5678.9 Preveza
KLM1234.5678.13 Patra
PRO0034.5678.6 Volos
PRO0034.5678.11 Volos
PRO1232.5678.44 Kalamata

 Έγγραφο α$
Κατάσταση α="KLM1234.5678.9":="Preveza", "KLM1234.5678.13":="Patra","PRO0034.5678.6":="Volos", "PRO1232.5678.44":="Kalamata", "PRO0034.5678.11":="Volos"
Ταξινόμηση α ως αριθμός
κάθε_κλειδί=Κάθε(α)
Ενώ κάθε_κλειδί {
      α$=Εκφρ$(α, κάθε_κλειδί^)+" "+Εκφρ$(α) +{
      }
}
Πρόχειρο α$

 
5.Η κατάσταση ουρά, όπου επιτρέπονται όμοια κλειδιά, απέκτησε και αυτή ταξινόμηση, τύπου inplace, έτσι ώστε τα όμοια κλειδιά να διατηρούν την σχετική τους θέση, και η αναζήτηση να δίνει ότι έδινε και πριν. (οι καταστάσεις είναι πίνακες με συνάρτηση κατακερματισμού, και έχουν γρήγορη εύρεση, προσθήκη, διαγραφή, αλλά η Κατάσταση Ουρά. διαγράφει μόνο από το τέλος)

Στο παράδειγμα η alfa έχει το κλειδί 4 δυο φορές, στην μία έχει τιμή 30 και στην άλλη το 1000. Όσα κλειδιά δεν έχουν ειδικα τιμές, είναι τα ίδια τιμές (για διάβασμα μόνο)
 cls  ' just clear screen
inventory queue alfa=1,4:=30,2,6,3,4:=1000,2
\\ inventories are com objects inside M2000
\\ so we can manipulate internal properties
\\ with alfa, "inplace", false  \\ by default is true
\\ check withn 2000 or more items
for i=1 to 50 {
      append alfa, random(50000)
}
Print "Begin"
refresh
profiler   ' set HQ timer
sort descending alfa as number
sort ascending alfa as number
print timecount ' return miliseconds, but has many decimal parts.

6. Μπορούμε να ορίσουμε καταστάσεις σε μια εντολή Κατάσταση, και να δώσουμε και τιμές (παλιά θα δίναμε σε καμία ή στην τελευταία, αλλά όχι σε δυο η περισσότερες στην ίδια εντολή).

7. Η Ενώ εκτός από την Ενώ Συνθήκη είχε και την παραλλαγή με την Ενώ επαναλήπτης {}, όπου ο επαναλήπτης είναι ένα αντικείμενο που κρατάει το δρομέα για ένα άλλο αντικείμενο (μπορούμε να δώσουμε πίνακα, κατάσταση και σωρό ως αντικείμενα για επαναλήπτη). Τώρα μπορούμε στην ιδια Ενώ να παραθέσουμε περισσότερους από έναν επαναλήπτη, και η επανάληψη θα τελειώσει ότι ένας τουλάχιστον τερματίσει. Ισχύουν όπως παλαιότερα οι φωλιασμένοο επαναλήπτες.


k=(1,2,3,4,5)
k1=Each(k,1, 3)
Print "k1"
While k1 {
      ' 3 times
      Print Array(k1)
}
k1=Each(k,1, 3) ' from start to 3rd
k2=Each(k,-1, 3) ' from end to 3rd (we can use here -3 as 3rd from last)
Print "k1, k2"
While k1, k2 {
      ' 3 times
      Print Array(k1)*Array(k2)
}
k1=Each(k,1, 3)
k2=Each(k,-1, 3)
Print "k1*k2"
While k1 {
      While k2 {
            ' 3x3 times
            Print Array(k1)*Array(k2)
      }
}



8. Φτιάχτηκε τρόπος ώστε να δουλεύουν παλιά προγράμματα που χρησιμοποιούσαν μεταβλητές με ίδια ονόματα με εντολές που γράφτηκαν για τον διερμηνευτή πιο πρόσφατα. Ο διερμηνευτής βγάζει πρόσκαιρα την εσωτερική συνάρτηση ή και πίνακα, και την ξαναδίνει όταν το τμήμα/συνάρτηση που έκανε την αλλαγή τερματίσει.

Στο παράδειγμα την Μήκος() την κάνουμε πίνακα μέσα στην Β(). αλλά στην επιστροφή λειτουργεί σωστά ως συνάρτηση που δίνει το  μήκος αλφαριθμητικών και αντικειμένων (πχ εδώ δίνει τον αριθμό στοιχείων του πίνακα Άλφα()).

Συνάρτηση Β {
      Πίνακας Μήκος(10)=100
      Μήκος(3)++
      Τύπωσε Μήκος(3) ' 101
      =Μήκος()
}

Πίνακας Αλφα()
Αλφα()=Β()
Τύπωσε Μήκος(Αλφα()) ' 10
Τύπωσε Αλφα(3) ' 101





Το παράδειγμα που εμφανίζει την εικόνα παραπάνω:

Form 80,50
? $(4) \\ set proportionl print
\\ report is always proportional
Report 2, {
     Using Inventory Example, to store keys as numbers or keys with numbers inside
     Inventory may have pairs of keys-values, or keys, or mix
     when a key has no values then key is a value also
     for key as value interpreter find if it is a number or a string, from starting letter
     if it is a number may have some characters after and is no problem but included in sorting if numbers are equal.
     
     
}
\\ need revision 21 and up
\\ unique keys only
inventory alfa="hello", 1,4,12,.324,32.423,"alfa","al1",23.2,"342 dpi",-343,-24,33,234, "al20", "al110","alfa[23][2]", "alfa[23][11]", "alfa[91][2]", "alfa[124][11]"
Print "Sort keys ascending"
Sort alfa as number
print alfa

Print "Sort keys descending"
Sort descending alfa as number
print alfa
here=row
Pen #ff5522 {Print  "Iterate from start"}
k=each(alfa)
def IsVal(m)=eval$(m) ~ "[-0-9.]*"
While k {
     if IsVal(k) then {
            Print val(eval$(k))
      } else {
            Print eval$(k)
      }
}

Pen #ff5522 { Print @(tab(3), here), "Reverse reading"}
k=each(alfa, -1, 1)
While k {
    Cursor tab(3)
     if IsVal(k) then {
            Print val(eval$(k))
      } else {
            Print eval$(k)
      }
}
Pen #ff5522 { Print @(tab(5), here), "Reverse reading only keys"}
k=each(alfa, -1, 1)
While k {
    Cursor tab(5)
            Print eval$(k, k^)

}
\\ clear alfa, using a new one without parameters
\\ using queue we can put any key, including same key
\\ but always we get the last of the same key
\\ we can't delete from anywhere, only using Drop command
Inventory queue alfa
Inventory alfa=1,11,2,2,3,5,-10
\\ only number Sort allowed
Sort alfa as number
Print alfa
\\ Drop iventory_name To expr  (drop  all items from item number plus one )
\\ Drop iventory_name  expr  (drop last items)
\\ Drop iventory_name,  expr  ' same as above, comma is optional from this revision
Drop alfa 4
Print "Drop 4 from end"
Print alfa
Print "Append 4 items - no sorting"
Append alfa, 7,2,7,6
Print alfa
Print "Sorting ascending"
Sort ascending alfa as number ' ascending is optional here - by  default is in ascending order
Print alfa
Drop alfa to 5
Print "Drop from 5+1, so we keep 5 items"
Print alfa