Τετάρτη 15 Φεβρουαρίου 2017

Αναθεώρηση 18 - Έκδοση 8.2

Διορθώθηκαν δυο πράγματα:
1) Στις λάμδα συναρτήσεις γίνεται έλεγχος για τις Καταστάσεις (τύπος Inventory, Κατάσταση) που μπορεί να έχουν κρατήσει (captured) κατά την διαγραφή τους ώστε να αποδεσμευτούν από τον συλλέκτη σκουπιδιών (garbage collector). Οι καταστάσεις (λίστες με κλειδί) περνούν με αναφορά, και η αναφορά περνάει και στον garbage collector.
Με την εντολή Λίστα (list) βλέπουμε τι μεταβλητές έχουμε τη δεδομένη στιγμή και αν έχουν κρατηθεί αναφορές στον συλλέκτη σκουπιδιών (δεν εμφανίζεται η αναφορά αν δεν έχουμε, ή εμφανίζεται "Αντικείμενα για διαγραφή και ο αριθμός τους"

 Φόρμα 60,40
δυαδ0$=λάμδα$ ->{
      Κατάσταση δυαδική_τιμή = 0:="0000",1:= "0001",2:= "0010", 3:="0011",4:= "0100", 5:="0101", 6:="0110", 7:="0111", 8:="1000", 9:="1001", "A":="1010", "B":="1011", "C":="1100", "D":="1101", "E":="1110", "F":="1111"     
      \\ η δυαδ$ είναι μια λάμδα συνάρτηση που συλλαμβάνει τη Κατάσταση δυαδική_τιμή
      \\ τα πρώτα κλειδιά έχουν ως αριθμοί. Η κατάσταση τα δέχεται και ως αριθμούς και ως γράμματα, γιατί τα κλειδιά τα κρατάει ως γράμματα εσωτερικά!
      = λάμδα$ δυαδική_τιμή->{
            Διάβασε μια_τιμή
            Αν Ταύτιση("Α") τότε {
                  Διάβασε από_εδώ
                 από_εδώ=2*(ακ(4-από_εδώ) υπολ 4+1)-1
            } Αλλιώς {
                  από_εδώ=1
            }
                  δεκαεξαδική$ = Δεκαεξ$( μια_τιμή, 4 )
            Εγγραφο Αα$
            Για ι = από_εδώ Εως Μήκος( δεκαεξαδική$ )
                  Αα$ =  δυαδική_τιμή$( Μεσ$( δεκαεξαδική$, ι, 1 ) )
            Επόμενο ι
            = Αα$
      }
}
δυαδ$=δυαδ0$()
Τύπωσε δυαδ$(12), 12
Τύπωσε δυαδ$(255,1), 255
Τύπωσε δυαδ$(256*256+255,2), 256*256+255
Τύπωσε δυαδ$(0xFF446688,4), 0xFF446688
Λίστα  \\ δείχνει τις μεταβλητές και στο τέλος λέει Αντικείμενα για καταστροφή 1 (και αυτό είναι η Κατάσταση, που είναι με αναφορά)
Βάλε δυαδ$ \\ βάζουμε στο σωρό ένα αντίγραφο
\\  όταν τερματίσει το πρόγραμμα δίνουμε τις εντολές
\\  Σωρός  (και βλέπουμε ότι υπάρχει ένα αντικείμενο λάμδα)
\\ Λίστα (και μας λέει ότι έχει ένα αντικείμενο για διαγραφή)
\\ έχουμε δυο δυνατότητες
\\ ή παίρνουμε τη λάμδα σε μια μεταβλητή (πρέπει να είναι τύπου αλφαριθμητικού, όπως φτιάξαμε τη λάμδα)
\\ Διάβασε δ$  : Τύπωσε δ$(123, 1) : λίστα  \\ παραμένει το ένα αντικείμενο
\\ Καθαρό : Λίστα  \\ τώρα δεν υπάρχει τίποτα
\\ ή αδειάζουμε το σωρό με την Άδειασε χωρίς να φτιάξουμε λάμδα συνάρτηση
\\ Άδειασε : Λίστα \\ τώρα έχει διαγραφεί και το αντικείμενο που κράταγε η λάμδα στο σωρό!



2) Διορθώθηκε και αυτό (είχε λάθος στο Read για τις λάμδα σε μεταβλητή string, κατά το διάβασμα από το σωρό)

a$=Lambda$->"Ok"
Print a$()
Push a$ \\ to stack
Read m$ \\ from stack to new variable
Print type$(m$), m$()
 

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

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

You can feel free to write any suggestion, or idea on the subject.