Σάββατο, 8 Ιουλίου 2017

Αναθεώρηση 9 (Έκδοση 8.9)

1) Βελτιώθηκε ο κώδικας, είναι πιο γρήγορος τώρα!
2) Για λόγους συμβατότητας με παλαιότερα προγράμματα όπου για παράδειγμα η λέξη Κατάσταση χρησιμοποιείται ως μεταβλητή, ενώ τώρα είναι εντολή που δημιουργεί πίνακες κλειδιών και στοιχείων, στην αναθεώρηση αυτή μπήκε η δυνατότητα να έχουμε τις εντολές ως μεταβλητές ταυτόχρονα. Παρακάτω υπάρχει ταυτόχρονα η εντολή Κατάσταση και η μεταβλητή Κατάσταση. Επίσης υπάρχει τμήμα στην Άλφα που λέγεται Τύπωσε, αλλά εσωτερικά καλούμε την εντολή Τύπωσε, όχι το τμήμα! (στα τμήματα για να καλέσουν τον εαυτό τους θέλουν την Κάλεσε και το όνομα τμήματος και τα όποια ορίσματα θέλουμε να περάσουμε, ή μπορεί να υπάρχουν ήδη στο σωρό (στη Μ2000 στα τμήματα ο καθαρισμός του σωρού είναι ευθύνη του τμήματος, ενώ στις συναρτήσεις ο καθαρισμός γίνεται αυτόματα από το διερμηνευτή).

Δοκιμάστε λοιπόν (σε ένα τμήμα έστω Α):
Γενική Κατάσταση =10
Τύπωσε Κατάσταση
Κατάσταση Α=1:="Ένα", 2:="2", "αλλο":=1000
Τύπωσε=1000
Τύπωσε Τύπωσε
Ομάδα Άλφα {
      Τμήμα Τύπωσε {
            Τύπωσε "οκ"
      }
}
Άλφα.Τύπωσε
Τύπωσε Α$(1), Α$("αλλο")




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

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


Πίνακας α(10)
α(1)=Λάμδα ( χ, ψ) -> {
            =Λάμδα χ, ψ (β) -> {
                  Ομάδα z {
                        κ=Λάμδα ->500
                        '' μόνο για ανάγνωση η βήτα
                        Ιδιότητα βήτα {Αξία}=300
                        χ=10
                        \\ επειδή η ομάδα επιστρέφει τιμή
                        \\ πρέπει να φτιάξουμε μια συνάρτηση
                        \\ για να επιστρέφει αντίγραφο της ομάδας
                        Συνάρτηση Αντίγραφο {
                              =Αυτό
                        }
                        Αξία (χ) {
                              =2000*χ
                        }
                  }  
                  Πίνακας β(1)
                  Κατάσταση κκ = "άλφα":=Ομάδα(z)
                  β(0)=κκ
                =β()
            }
}
Κατάσταση μ=10:=α()
Τύπωσε μ(10)(1)(2,3)(2)(0)("άλφα")(100)
Τύπωσε μ(10)(1)(2,3)(2)(0)("άλφα") ' επιστροφή της τιμής .χ
Τύπωσε μ(10)(1)(2,3)(2)(0)("άλφα").κ() ' κλήση της λάμδα
Τύπωσε μ(10)(1)(2,3)(2)(0)("άλφα").βήτα
ομάδα1=μ(10)(1)(2,3)(2)(0)("άλφα").Αντίγραφο()
Τύπωσε Τύπος$(ομάδα1)
Για ομάδα1 {
      Τύπωσε .χ, .κ(), .βήτα
}

και στα αγγλικά:
Dim a(10)
a(1)=Lambda (x, y) -> {
            =Lambda x, y (b) -> {
                  Group z {
                        k=Lambda ->500
                        Property beta {Value}=300
                        Function Copy {
                              =This
                        }
                        x=10
                        Value (x) {
                              =2000*x
                        }
                  }  
                  Dim b(1)
                  Inventory kk = "alfa":=group(z)
                  b(0)=kk
                =b()
            }
}
Inventory m=10:=a()
Print m(10)(1)(2,3)(2)(0)("alfa")(100)
Print m(10)(1)(2,3)(2)(0)("alfa").x ' return x from group
Print m(10)(1)(2,3)(2)(0)("alfa").k() ' call lamda k() of group
Print m(10)(1)(2,3)(2)(0)("alfa").beta
group1=m(10)(1)(2,3)(2)(0)("alfa").Copy()
Print Type$(group1)
For group1 {
      Print .x, .k(), .beta
}