Παρασκευή, 7 Απριλίου 2017

Αναθεώρηση 2 (Έκδοση 8.7) προσθήκες!

Σε αυτήν την αναθεώρηση τελείωσα με τις προσθήκες για τους αυτόματους πίνακες και τα αντικείμενα σωρούς. Παράλληλα έγιναν πρόθεσετες αλλαγές - κύρια στο θέμα της συμβατότητας με τις μεταβλητές τύπου Μακρύ (ή Long). Έκανα προσθήκη και στη ρουτίνα χρωματισμού κώδικα ώστε μια λάμδα συνάρτηση (ανώνυμη) να εμφανίζεται σωστά χρωματισμένη όταν μπει ως παράμετρος (οι αγκύλες φαινόντουσαν ως αλφαριθμητικό ενώ τώρα ο "χρωματιστής" ξέρει τι κάνει). Σημειώστε ότι τον επεξεργαστή κειμένου και το στοιχείο ελέγχου (user control) είναι δικής μου έμπνευσης και υλοποίησης, και φυσικά και η ρουτίνα χρωματισμού.
Ενημέρωσα την βοήθεια για την εντολή Επιστροφή ή Return. Αυτή η εντολή έχει τρεις εκδοχές:

1. Με πρώτη παράμετρο αλφαριθμητικό που δείχνει μια βάση δεδομένων και μετά ερώτημα SQL, σε αλφαριθμητικό, και λίστα τιμών που θα επιστρέψουμε εκεί που δείχνει το ερώτημα SQL, ενημερώνουμε εγγραφή σε βάση δεδομένων
2. Σε απλές ρουτίνες με την εντολή Διαμέσου και αριθμό γραμμής (οι αριθμοί είναι στην ουσία ετικέτες και όχι πραγματικοί αριθμοί γραμμής) ή ετικέτα με πρώτο χαρακτήρα γράμμα, η Επιστροφή χρειάζεται για να γυρίσουμε από την ρουτίνα.
3. Εδώ θα δείξω παράδειγμα (όπως το έχω στη Βοήθεια Επιστροφή):
 Το παράδειγμα έχει τρια μέρη. Στο πρώτο επιστρέφουμε τιμές σε αντικείμενο Κατάσταση, στο δεύτερο σε Αυτόματο Πίνακα (δεν έχει παρενθέσεις, και στην ουσία η μεταβλητή είναι αναφορά στο πίνακα), και το τρίτο είναι η επιστροφή σε αντικείμενο Σωρό. Ειδικά για το σωρό δείχνω πως εύκολα μπορούμε να μετακινούμε στοιχεία.
Παράλληλα δείχνω πως χρησιμοποιούμε Επαναλήπτη για κάθε αντικείμενο.

Κατάσταση Α=1:="Γεια","αλλο":="Ναι"
\\ οι καταστάσεις καταχωρούν βάσει κλειδιών
Επιστροφή Α, "αλλο":="Όχι", 1:="Γειά σου"
Τύπωσε Α$("αλλο"), Α$(1)
\\ ο ΑΑ είναι επαναλήπτης
ΑΑ=Κάθε(Α)
Τύπωσε "Κλειδί", "Τιμή"
Ενώ ΑΑ { Τύπωσε εκφρ$(ΑΑ!), εκφρ$(ΑΑ)}

Β=(1,2,3,4,5)
\\ Η Πίνακας(Β) φέρνει το πρώτο στοιχείο
Επιστροφή Β,3:=400, 0:=Πίνακας(Β)+1,1:=Πίνακας(Β,1)**2 ' με βάση 0 , το 3 είναι το 4ο στοιχείο
Τύπωσε Β
Τύπωσε Πίνακας(Β,3)
\\ Ο ΒΒ είναι επαναλήπτης
ΒΒ=Κάθε(Β)
Ενώ ΒΒ { Τύπωσε γραφή$(Πίνακας(ΒΒ),"00000")}


\\ Ο σωρός έχει κλειδιά θέσεις και μετακινεί εύκολα στοιχεία χωρίς αντιγραφές
Μ=Σωρός:=1,2,3,4,5
Επιστροφή Μ, 4:=400,1:=ΤιμήΣωρού(Μ)+1, 2:=ΤιμήΣωρού(Μ,2)**2 ' Οι σωροί έχουν βάση 1
Τύπωσε Μ
Τύπωσε ΤιμήΣωρού(Μ,4)
\\ Ο ΜΜ είναι επαναλήπτης
ΜΜ=Κάθε(Μ,-1,1) \\ ή Κάθε(Μ Τέλος Έως Αρχή) ή Κάθε(Μ -1 Εως 1)
Ενώ ΜΜ {Τύπωσε Γραφή$(ΤιμήΣωρού(ΜΜ),"00000")}
Σωρός Μ {Φέρε 4 : ΦέρεΠίσω 5} \\ μετακίνηση του 4ου στοιχείου στην 5η θέση
Τύπωσε Μ



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

Inventory a=1:="Hello","other":="Yes"
\\ Inventroy is a list with key and value
Return a, "other":="No", 1:="Hello again"
Print a$("other"), a$(1)
aa=each(a)
Print "key", "value"
while aa {Print eval$(aa!), eval$(aa)}


b=(1,2,3,4,5) ' auto array - b is a reference to array
\\ Array(b) is the first item
Return b,3:=400, 0:=Array(b)+1,1:=Array(b,1)**2 ' for base 0 index 3 is the forth item
Print b
Print Array(b,3)
bb=each(b)
While bb { Print str$(Array(bb),"00000")}


\\ Stack is a linked list. Keys are positions from 1. We can move any item easy
m=Stack:=1,2,3,4,5
Return m, 4:=400,1:=StackItem(m)+1, 2:=StackItem(m,2)**2 ' Stacks have base 1
Print m
Print StackItem(m,4)
mm=each(m, -1, 1)
While mm { Print str$(Stackitem(mm),"00000")}
Stack m { Shift 4 : ShiftBack 5} \\ send 4th element to 5th position
Print m