Παρασκευή, 3 Ιουνίου 2016

Αναθεώρηση 24 (σχεδόν τελική αναθεώρηση)

Διορθώθηκε το πρόβλημα στην ανάγνωση ονομάτων συναρτήσεων στα Com αντικείμενα!
Το παρακάτω στο 14 περίπου έβγαζε out of stack. (το alfa είναι Inventory, λίστα της Μ2000 που λέγεται Κατάσταση)

Declare Worksheet "{00020820-0000-0000-C000-000000000046}"
Profiler
FOR I=1 TO 100 {
alfa=param(Worksheet)
Print i
}
? timecount


Διορθώθηκαν κάποιες αλλαγές που είχε επιφέρει η χρήση των πινάκων κατακερματισμού για εύρεση ονομάτων, κύρια με την αναδρομή:

παράδειγμα:
function k {
      function mp {
            read x
            if x<2 then =1 : exit
            =mp(x-1)*x
      }
      read ka

  = mp(ka)
}
Print k( 10 )


function k$ {
      function mp$ {
            read ? x
             if x<2 then ="1" : exit
            =str$(val(mp$(x-1))*x)
      }
      read ka
  = mp$(ka)
}
Print k$( 10 )

Στις λάμδα συναρτήσεις μπήκαν το Λάμδα$() και Λάμδα() για να γίνεται αναδρομή χωρίς να μας ενδιαφέρει το "τρέχον" όνομα. Στο παράδειγμα γίνεται αναδρομή στο στοιχείο πίνακα Α(3) που έχει μια λάμδα συνάρτηση (και έτσι δεν έχει όνομα, μόνο θέση σε πίνακα).
Γίνεται κλήση του CheckMe με δυο τρόπους. η Κάλεσε ή Call το καλεί με δυνατότητα αναδρομής, ενώ η κλήση χωρίς αυτήν, με το όνομα μόνο δεν δίνει δικαίωμα αναδρομής (έχει ρόλο το όνομα που χρησιμοποιείται τη δεδομένη στιγμή και στο Call αλλάζει εσωτερικά)

Module CheckMe {
      Group z {
            p=lambda-> {
                  read n
                  if n<2 then =1 : exit
           
                  =lambda(n-1)*n
            }
      }
      Print z.p(3)
      m=z.p
      Print m(6)
      Print M(12)
      dim A(10)
      A(3)=m
      Print A(3)(8)
}

CALL CheckMe
CheckMe

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

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