Κυριακή, 3 Ιανουαρίου 2016

Αναθεώρηση 133 - Και περί Ομάδων

Καλή χρονιά! Και με νέα αναθεώρηση 133.
Σε αυτή την αναθεώρηση βρήκα ένα bug στην αντιγραφή ομάδας όταν έχει πίνακα. Παρακάτω παραθέτω ένα "πρόγραμμα" που στην ουσία δείχνει πως  φτιάχνουμε αντικείμενα με την εντολή Ομάδα και με την εντολή Κλάση. Τα αντικείμενα στη Μ2000 είναι δυο ειδών, τα επώνυμα όπως οι μεταβλητές, και τα ανώνυμα, τα οποία μπορούν να βρίσκονται ή στο σωρό τιμών, ή σε στοιχεία πίνακα. Όταν προορισμός αντιγραφής είναι ένα όνομα (αναγνωριστικό) τότε αν είναι νέο δημιουργείται ένα επώνυμο αντικείμενο, αν υπάρχει τότε έχουμε ένωση, δηλαδή ότι υπάρχει στο προς αντιγραφή θα καταλήξει στο προορισμό, χωρίς να σβήσουν τυχόν άλλα που υπάρχουν στον προορισμό αλλά όχι στο προς αντιγραφή. Αν ο προορισμός αντιγραφής είναι μια ανώνυμη ομάδα τότε ότι θα αντικατασταθεί με την παρεχόμενη, την προς αντιγραφή ομάδα. Αν θέλουμε να "αναβαθμίσουμε" ένα ανώνυμο τμήμα (αν αυτό δεν έχει φτιαχτεί σε πίνακα κλάσεων), αλλά είναι σε ένα στοιχείο πίνακα, τότε μπορούμε με την Για { } να δημιουργήσουμε πρόσκαιρα μια επώνυμη ομάδα, που θα απευθυνόμαστε σε αυτή με το ΑΥΤΟ (ή αν καλούμε συναρτήσεις ή και τμήματα, τότε θα βάζουμε μια τελεία στην αρχή).
Πίνακας κλάσεων είναι ο πίνακας που μηδενίζεται με ομάδα. Οι συναρτήσεις και τα τμήματα της ομάδας θα παρέχονται από τον ίδιο πίνακα σε όλα τα στοιχεία. Αυτές οι συναρτήσεις / τμήματα δεν αναβαθμίζονται. Όμως πίνακες και μεταβλητές μπορούν να αλλάξουν, να προστεθούν και άλλα, να αλλάξουν μέγεθος οι πίνακες σε κάθε στοιχείο ξεχωριστά!


\\ γενική μορφή
Ομάδα κ1 {
      α=1, β=2
}
Τύπωσε κ1.α


\\ παλιά μορφή
Ομάδα κ2 τύπος {
      α=1, β=2
}
Τύπωσε κ2.α


\\ παλιά μορφή με αλφαριθμητικό
\\ για να φτιάχνονται πολλά με τον ίδιο τύπο
α$={α=1,
β=2
}
Ομάδα κ3 τύπος α$
Τύπωσε κ3.α



\\ Μορφή στη 8η έκδοση
\\ 1. Φτιάχνουμε την Κλάση κ
\\ που είναι μια συνάρτηση
\\ που επιστρέφει μια "πτητική" ομάδα
Κλάση κ {
      α=1, β=2
      Πίνακας Α(20)=123
      ομάδα λ { μ=1000 }
      τμήμα κ {
            αν ταύτιση("Α") τότε διάβασε
      }
      Συνάρτηση Κοίτα {
            =.λ.μ*αριθμός \\ ο αριθμός γυρίζει τον αριθμό από τη κορυφή του σωρού παραμέτρων
      }
}
κ40=κ()
Τύπωσε κ40.α
κ4=κ(30)
Τύπωσε κ4.α, κ4.Κοίτα(123)


\\ 2. Αντιγράφουμε το κ4 στο νέο κ5
κ5=κ4
Τύπωσε κ5.α


\\ 3. Αντιγράφουμε το κ4 στο σωρό
Βάλε κ4
\\ 4. Μπορούμε να το πάρουμε από το σωρό
\\ ακόμα και αν έχουμε βγει από το τμήμα
\\ που φτιάχτηκε το κ4
\\ στο σωτό είναι η "πτητική" ομάδα
Διάβασε κ6
Τύπωσε κ6.α
\\ Μπορούμε πτητικές ομάδες να τις βάζουμε σε στοιχεία πίνακα
Πίνακας Α(2,2)
Α(1,1)=κ4
Τύπωσε Α(1,1).α+Α(1,1).β


\\ Η Για δουλεύει και για πτητικές ομάδες
Για Α(1,1) { Τύπωσε+}
Για κ6 { Τύπωσε+}


\\ μπορούμε να μεταφέρουμε έναν πίνακα με ομάδες
\\ αλλά και ομάδες με αναφορά
Τμήμα δοκιμασέ_με {
      Διάβασε &Β(), &κκ
      Τύπωσε Β(1,1).α, Β(1,1).κοιτα(30)
      Τύπωσε κκ.α, κκ.κοιτα(50)
}
δοκιμασέ_με &Α(), &κ4


\\ Μπορούμε να μεταφέρουμε με αντιγραφή
Τμήμα Δοκ2 {
      Διάβασε ββ, κκ
      Τύπωσε ββ.α, κκ.κοιτα(30)
      Τύπωσε κκ.α, κκ.κοιτα(50)
}
Δοκ2 Α(1,1), κ4
Πίνακας κ4.α(10)=345
Τυπωσε Α(1,1).α(2), κ4.α(2) \\ 123   345


κ4=α(1,1) \\ αντιγραφή στο κ4
\\ Αυτό διορθώθηκε στην 133 - στην 132 έδινε 123 345
Τυπωσε Α(1,1).α(2), κ4.α(2) \\ 123   123



\\ Μπορούμε να επιστρέφουμε μια ομάδα με μια συνάρτηση
\\ (παρόμοια δουλειά κάνει και η εντολή Κλάση)
Συνάρτηση Κάτι {
      Ομάδα κκκ {
            α=100, β=200
      }
      =κκκ
}
κ7=Κάτι()
Τύπωσε κ7.α, κ7.β