Πέμπτη, 7 Απριλίου 2016

Αναθεώρηση 207 - και παράδειγμα άσκηση!

1. Διορθώθηκε το Σ (δουλεύει ως @Σ και Σ και ως Συγγραφή και ως Edit και @Edit)
2. Έγινε και μια προσθήκη στο Combobox ώστε στην ολίσθηση σε μενού με radio button να κάνει μεταγωγή του radio κατάλληλα. (εκτός από διπλό κλικ παίρνει και ολίσθηση στοιχείου slide right)
3. Έγινε περιορισμός στην δυνατότητα αλλαγής μεγέθους παραθύρων ώστε η μικρή τελεία κάτω δεξιά να μην κρύβεται (να μην βγαίνει εκτός οθόνης). Ο περιορισμός ισχύει μόνο όταν μετακινούμε την τελεία αυτή (βγαίνει ένα διαγώνιο άνω-κάτω βελάκι).


Και μία άσκηση:
Θέλουμε μια συνάρτηση Α να πάρει μια "κάτι" το οποίο να καλεί αυτόν που την κάλεσε πριν τερματίσει πέντε φορές δίνοντάς του κάτι με τιμή.


\\ κάνουμε χρήση του σωρού τιμών. (ειδική ουρά)
Τμημα Τ {
      Σωρός Νέος {
            Χ=100
            Συνάρτηση Δ {
                  \\ καλείται ως Τ
                  Διάβασε
                  \\ Η σειρά ή Data βάζει στο τέλος του σωρού
                  \\ άρα θα δουλέψουμε ως FIFO
                  Σειρά Κ
                  Κ+=Χ
            }
          Συνάρτηση A {
                  Διάβασε &Β()
                  Γ=10
                  Για ι=1 έως 5 {
                        \\ καλούμε πίσω με αναφορά μπροστά!
                        Κάλεσε Β(&Γ)
                        Γ++
                  }
            }
            \\ περάσμα με αναφορά και περιβάλλον μαζί
            \\ Αυτό το κάνει η Οκν$() ή Lazy$()
            Κάλεσε A(Οκν$(&Δ()))
            \\ Αν ο σωρός δεν είναι κενός
            Ενώ Όχι Κενό {
                  Τύπωσε Αριθμός    \\  10, 111, 212,313,414
            }
            Τύπωσε Χ     \\ 100
      }
}
Κάλεσε Τ




Με άλλο τρόπο, με πίνακα:

Τμημα Τ {
      Ομάδα Μ {
            Χ=100, Π
            Πίνακας ΜΜ()
            Συνάρτηση Δ {
                  \\ καλείται ως Τ
                  Διάβασε
                  ++
                  Πίνακας .ΜΜ(.Π)
                  .ΜΜ(.Π-1)=Κ
                  Κ+=
            }
            Τμήμα ΔείξεΤώρα {
                  Αν .Π=0 τότε Έξοδος
                  Για Ι=0 έως-1 {
                        Τύπωσε .ΜΜ(Ι)
                  }
            }
         }
          Συνάρτηση A {
                  Διάβασε &Β()
                  Γ=10
                  Για ι=1 έως 5 {
                        \\ καλούμε πίσω με αναφορά μπροστά!
                        Κάλεσε Β(&Γ)
                        Γ++
                  }
            }
            \\ περάσμα με αναφορά και περιβάλλον μαζί
            Κάλεσε A(&Μ.Δ())
            \\ Αν ο σωρός δεν είναι κενός
            Μ.ΔείξεΤώρα
            Τύπωσε Μ.Χ \\ 100
}
Κάλεσε Τ


Άλλο παράδειγμα με συνάρτηση Λάμδα. Η συνάρτηση Ταύτιση() ή Match() παίρνει ένα αλφαριθμητικό με γράμματα τους τύπους αντικειμένων-τιμών που έχει ο σωρός τιμών (ο ειδικός σωρός, που μεταφέρει τιμές προς τμήματα και συναρτήσεις- και επιστρέφει από τμήματα και συναρτήσεις αν κληθούν με κάλεσε). Εδώ το Α σημαίνει αριθμός. Αν υπάρχει ταύτιση της κορυφής του σωρού με αριθμό τότε πάμε στην Επίλεξε με Αριθμός. Η Αριθμός είναι η κορυφή του σωρού (βγαίνει άμεσα). Αν δεν είναι αριθμός τότε βγαίνει λάθος, αλλά είμαστε σίγουροι για αυτό με την Ταύτιση.
Α Αριθμός
Γ Γράμματα/Αλφαριθμητικά/Δείκτες-ισχνές αναφορές
Π Πίνακες
Ο Ομάδα (αντικείμενα)
Ε Γεγονότα
Λ Λάμδα

Όταν περνάμε κάτι με αναφορά περνάμε αλφαριθμητικό με ισχνή αναφορά. Αν όμως αυτό είναι συνάρτηση τότε περνάμε τον ορισμό της. Οι λάμδα συναρτήσεις έχουν και ορισμό συνάρτησης και αντικείμενο. Ο ορισμός συνάρτησης τρέχει το αντικείμενο (είναι ο ενδιάμεσος). Αν αντιγράψουμε την λάμδα σε ένα άλλο όνομα θα δημιουργηθεί και ο ενδιάμεσος. Ότι βάζουμε στον σωρό είναι με αντιγραφή εκτός από τους πίνακες. Οι πίνακες δεν αντιγράφονται όταν μπαίνουν στον σωρό αλλά όταν βγαίνουν! Έτσι τυχόν μεταβολές θα τις πάρει το αντίγραφο αλλά μια φορά Στο σωρό δεν μπορούμε να βάλουμε αντικείμενα όπως WinWord και άλλα τύπου Com, καθώς και τα αντικείμενα του GUI. Textbox, EditBox, ListBox, ComboBox, CheckBox, Button, Form


Τμημα Τ {
      Πίνακας ΜΜ()
      \\ Η Λάμδα συλλαμβάνει τον ΜΜ()
      Δ=Λάμδα Χ=100, ΜΜ(), Π=0-> {
                  Αν Ταύτιση("Α") τότε {
                  \\ διαβάζουμε τον αριθμό
                  Επίλεξε Με Αριθμός
                  Με 0
                  {
                        Αν Π=0 τότε Έξοδος
                        Για Ι=0 έως Π-1 {
                              Τύπωσε ΜΜ(Ι)
                        }
                  }
                  Με 1
                        Τύπωσε Χ
                  Τέλος Επιλογής
                  } αλλιώς {
                        Διάβασε
                        Π++
                        Πίνακας ΜΜ(Π)
                        ΜΜ(Π-1)=Κ
                        Κ+=Χ
                  }
      }
          Συνάρτηση A {
                  Διάβασε &Β()
                  Γ=10
                  Για ι=1 έως 5 {
                        \\ καλούμε πίσω με αναφορά μπροστά!
                        Κάλεσε Β(&Γ)
                        Γ++
                  }
            }
            \\ περάσμα με αναφορά και περιβάλλον μαζί
            Κάλεσε A(&Δ())
            Κάλεσε Δ(0) \\ δίνει τα νούμερα που έχει κρατήσει η Λάμδα!
            Κάλεσε Δ(1) \\ Δίνει το Χ 100
}
Κάλεσε Τ



Και τέταρτη περίπτωση χρήση Γεγονότος! Θα μπορούσα να κάνω Multicast, προσθέτοντας και άλλες συναρτήσεις στο Γεγονός. Κάθε παράμετρος πάει σε κάθε συνάρτηση. Εδώ δεν φαίνεται στην λάμδα η παράμετρος, γιατί είναι στο σωρό και δεν την σηκώνω για να την ξαναβάλω!
Το περιβάλλον μπήκε με την Οκν$(). Στην Δ, δεν μπήκε αντίγραφο του ΓΓ γεγονότος. (είναι η μόνη περίπτωση που έχω αφήσει να μπαίνει δεύτερος δείκτης σε αντικείμενο. 
με  Δ=Λάμδα ΔΓ=ΓΓ -> { Κάλεσε Γεγονός ΔΓ }  θα μπορούσαμε να δώσουμε αντίγραφο. Υπάρχει εντολή που σταματάει ένα γεγονός. π.χ. η Γεγονός ΓΓ Κράτησε το σταματάει, και κάθε Κάλεσε Γεγονός ΓΓ &Μ δεν γίνεται (η αναφορά ή τιμή αν περνάγαμε διαγράφεται).
Πράγματι εδώ αν βάλουμε το Γεγονός ΓΓ Κράτησε μετά την Δ=Λάμδα....δεν θα πάρουμε λάθος αλλά δεν θα πάρουμε και τις τιμές στο πίνακα!


Τμημα Τ {
      Πίνακας ΜΜ()
      Γεγονός ΓΓ { Διάβασε }
      Στη Χ=100, Π=0
      Συνάρτηση ΔΔ {
                        Διάβασε
                        Π++
                        Πίνακας ΜΜ(Π)
                        ΜΜ(Π-1)=Κ
                        Κ+=Χ
                  }
      Γεγονός ΓΓ Νέο Οκν$(&ΔΔ())
      Δ=Λάμδα ΓΓ -> { Κάλεσε Γεγονός ΓΓ }
          Συνάρτηση A {
                  Διάβασε &Β()
                  Γ=10
                  Για ι=1 έως 5 {
                        \\ καλούμε πίσω με αναφορά μπροστά!
                        Κάλεσε Β(&Γ)
                        Γ++
                  }
            }
         Κάλεσε A(&Δ())
          Αν Π=0 τότε Έξοδος
                        Για Ι=0 έως Π-1 {
                              Τύπωσε ΜΜ(Ι)
                        }
            Τύπωσε Χ \\ Δίνει το Χ 100
        
}
Κάλεσε Τ


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

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