Σάββατο, 16 Απριλίου 2016

Λάμδα Συναρτήσεις & Σύλληψη - Παράδειγμα

Οι συναρτήσεις λάμδα στη Μ2000 είναι ένα νέο κεφάλαιο που δίνει πρόσθετες δυνατότητες βάσει των χαρακτηριστικών ότι είναι συνάμα και μεταβλητές και ότι έχουν δυνατότητα σύλληψης αντικειμένων-μεταβλητών. Η σύλληψη νοείται ως αντιγραφή στο περιβάλλον της λάμδα συνάρτησης. Από τη στιγμή της αντιγραφής μιλάμε για άλλη μεταβλητή ή πίνακα ή αντικείμενο


Α=λάμδα -> αριθμός**2
Τύπωσε Α(10) \\ 100
X=10
\\ σύλληψη Χ στο περιβάλλον της Α
Α=λάμδα X -> αριθμός**2+X
Τύπωσε Α(10) \\ 110
\\ σύλληψη λάμδα Α στην Β
Β=λάμδα Α -> Α(αριθμός*2)
Τύπωσε Β(10) \\ 410
Α=λάμδα Κ=1001->{=Κ : Κ++}
Τύπωσε Α(),Α() \\ 1001  1002
Τύπωσε Β(10) \\ 410  γιατί έχει κρατήσει δική του Α()
Πίνακας Α(3,3)
Α(0,0)=1,0,0,0,1,0,0,0,1
\\ σύλληψη πίνακα Α()
Γ=Λάμδα Α()->{ Διάβασε Χ, Υ, Β :=Α(Χ, Υ)*Β}
Πίνακας Α() \\ τον σβήνουμε γιατί έχει κρατηθεί αντίγραφο στη Γ
Τύπωσε Γ(1,1, 3), Γ(1,0, 3) \\ 3, 0
Τμήμα Κάτι {
      Διάβασε Α, Β, Γ
      Τύπωσε Α(10) \\ 1003  -- 1003 την δεύτερη φορά
      Τύπωσε Β(10) \\ 410
      Τύπωσε Γ(0,0,3) \\  3
}
Κάτι Α, Β, Γ \\ δίνουμε αντίγραφα
Κάτι Α, Β, Γ
Τμήμα Κάτι2 {
      Διάβασε,,
      Τύπωσε Α(10) \\ 1003  -- 1004 την δεύτερη φορά
      Τύπωσε Β(10) \\ 410
      Τύπωσε Γ(0,0,3) \\  3
}
Κάτι2,, \\ δίνουμε αναφορές
Κάτι2,,



Το παρακάτω θέλει δυνατό μυαλό:


Κλάση Αλφα {
      Χ, Υ , Ζ
}
\\ φτιάχνουμε το Κ από τη κλάση Άλφα
\\ το Κ είναι τύπου Ομάδα και όχι Άλφα
\\ το ότι είναι όπως το Άλφα απλά το γνωρίζουμε εμείς
Κ=Άλφα()
Κ.Χ+=100
Κ.Υ+=50
Κ.Ζ-=200
Για Κ { Τύπωσε .Χ,,}
\\  Η συνάρτηση λάμδα Α συλλαμβάνει το Κ στην τρέχουσα τιμή και διαμόρφωση
Α=Λάμδα Κ -> {
      Διάβασε Χ
      Μ=Κ
      Για Μ {
            *=Χ
            *=Χ
            *=Χ
      }
      =Μ
}


Κ=Α(10)
Για Κ { Τύπωσε .Χ,,}
Κ=Α(5)
Για Κ { Τύπωσε .Χ,,}
Κ=Α(1)
Για Κ { Τύπωσε .Χ,,}
Ομάδα Κ { Οκ=αληθές}
Τύπωσε Κ.Οκ
Κ=Α(0) \\ έχουμε συγχώνευση όχι αντικατάσταση (αλλάζουν μόνο ίδιες ιδιότητες)
Για Κ { Τύπωσε .Χ,,, γραφη$(.Οκ,";Αληθές;Ψευδές;")} \\ 0 0 0 Αληθές


\\ για πίνακα αντικειμένων
\\ πίνακες αντικειμένων με δήλωση με κλάση δεν παίρνουν νέες συναρτήσεις/τμήματα αλλά παίρνουν νέες ιδιότητες
Σημ 2.1 :
Πίνακας Μ(100)=Άλφα()
\\ Δείτε με δηλώσεις ξεχωριστές
Σημ 2.2 : Πίνακας Μ(100)
Σημ 2.2.1 :Μ(3)=Άλφα()
Σημ 2.2.1 :Μ(4)=Άλφα()



\\ Η Για ανοίγει πρόσκαιρα το αντικείμενο, κάνουμε εργασίες και το κλείνει ξανά
\\ στο κλείσιμο πετάει ότι νέο έχουμε κάνει, εκτός από νέες ιδιότητες
\\
\\ και αν δεν έχουμε ορίσει μια κλάση για όλο το πίνακα, τότε μπορούμε να αλλάξουμε/ορίσουμε
\\ νέες συναρτήσεις-τμήματα. Όμως μπορούμε να ορίζουμε λάμδα συναρτήσεις σε κάθε περίπτωση
Για Μ(3) {
      \\ προσθήκη ιδιότητας σε συγκεκριμένο αντικείμενο στο πίνακα
      Ομάδα Αυτό {
            Οκ=αληθές
            Συνάρτηση Κάπα {=100}
            ΒΒ=Λάμδα ->Αριθμός*
      }
      \\ Συγχώνευση
      Αυτό=Α(5)
      Τύπωσε .Κάπα(), "ν"
      Τύπωσε .ΒΒ(100), "λ"
  }
Τύπωσε Μ(3).Οκ, Έγκυρο(Μ(4).Οκ) \\ -1, 0  στο Μ(4) δεν βάλαμε ιδιότητα Οκ
Για Μ(3) { Τύπωσε .Χ,,, γραφη$(.Οκ,";Αληθές;Ψευδές;")} \\ 0 0 0 Αληθές
\\ Προσοχή στους πίνακες αντικειμένων έχουμε αντικατάσταση, όχι συγχώνευση
\\ (η συγχώνευση γίνεται με το Για Μ(3) { Αυτό = Άλφα() }
Σημ 1 :
Μ(3)=Άλφα() ' χωρίς συγχώνευση
Σημ 2 : Για Μ(3) { Αυτό = Άλφα() } ' με συγχώνευση
Τύπωσε Έγκυρο(Μ(3).Οκ), Έγκυρο(Μ(3).Κάπα())
Τύπωσε Μ(3).ΒΒ(50), "λ"  '' είναι πάντα έγκυρη, γιατί είναι περασμένη ως ιδιότητα τύπου λάμδα