Προς το περιεχόμενο

Ενημέρωση για τη Μ2000 (Γλώσσα προγραμματισμού)


M2000

Προτεινόμενες αναρτήσεις

Κώδικας ...για Range και Sum με Lambda (και ας λέει ο Elorand ότι δεν είναι)

Να μερικές lambda συναρτήσεις

 

Η Range η οποία πακετάρει ένα εσωτερικό Lamda με τις κατάλληλες τιμές για αρχή και τέλος.

Η δεύτερη είναι η Sum η οποία τρέχει μια συνάρτηση που παίρνει ως εισαγωγή...μέχρι να βγει λάθος. και τότε επιστρέφει του σούμα.

Η τρίτη είναι μια αλφαριθμητική lambda η οποία μάλιστα δεν επιστρέφει τιμή, απλά την καλούμε με Call (ή Κάλεσε)

 

 

Range = Lambda -> {
      Read St, Ed
      =Lambda St, Ed -> {
            if Ed>St Then {
                  Ed--
                  =Ed
            }  Else Error "finish"
      }
}

Sum = Lambda -> {
      Read What
      S=0
      Try {
            S+=What()
            Loop
      }      
      =S
}
Print Sum(Range(1,4))

 

a$=lambda$ ->{Read a$ : Print a$}
Call a$("George")


Η σύνταξη της Lambda είναι ως εξής:

1. εισαγωγικό Lambda ή Lambda$ για να λογαριάζει το σύστημα αν θα δώσει τιμή σε αλφαριθμητικό ή σε αριθμό (μπορούμε όπως είδαμε να μην αποδώσουμε τιμή, απλά να την καλέσουμε)

2, μερικές Non Local variables. Την ώρα της δημιουργίας μπορεί να είναι νέες ή υπάρχουσες. Αν είναι νέες μπορούμε να δώσουμε τιμή με =. Όμως εδώ είναι μια διαφορά, αυτές οι μεταβλητές δεν είναι απαραίτητα για εισαγωγή, μπορεί να είναι για επεξεργασία. Αυτές θα εμφανίζονται μέσα στο τμήμα της εκτέλεσης, αλλά πουθενά αλλού. Όταν δε κάνουμε αντιγραφή, αντιγράφονται και αυτές. Μπορούμε να έχουμε απλές τιμές ή άντικείμενο Lambda, δηλαδή να μια lambda μπορεί να έχει και άλλες lambda μαζί της.σε Non Local μεταβλητές. Οι τοπικές μεταβλητές "καθαρίζονται" στο πέρας της εκτέλεσης. Μέσα στο μπλοκ μπορούμε να έχουμε ότι θέλουμε, ακόμα και τοπικά τμήματα και συναρτήσεις, πίνακες, οτιδήποτε. Ακόμα μπορούμε να έχουμε οτιδήποτε γενικό συνδεδεμένο.

 

3. Μετά το -> (είναι απαραίτητο ακόμα και αν δεν υπάρχει το 2) έχουμε μπλοκ ή απλά μια παράσταση.

Με ελληνικές εντολές!

 

Περιοχή = λάμδα -> {
      Διάβασε Αρ, Τε
      =λάμδα Αρ, Τε -> {
            Αν Τε>Αρ Τότε {
                  =Αρ
                  Αρ++
            }  Αλλιώς Λάθος "Τέρμα"
      }
}
Κύβος=λάμδα -> αριθμός**3
ΣτηνΟθόνη = λάμδα ->{Τύπωσε Αριθμός}
Για_Κάθε_Ένα = λάμδα -> {
      Διάβασε Περ, Συναρ, Εξ
      Δες {
      Κάλεσε Εξ(Συναρ(Περ()))
      Κυκλικά
      }
}
\\Σε μια γραμμή εκτέλεση!
Κάλεσε Για_Κάθε_Ένα(Περιοχή(1,11), Κύβος, ΣτηνΟθόνη)


Να και ένα ωραίο παράδειγμα (στα αγγλικά)

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Φίλε γιατί δεν το παρουσιάζεις στην fosscomm?

 

http://fosscomm.cs.unipi.gr/index.php/presentation/?lang=en

 

Αν και έχει λήθει η προθεσμία παρουσιάσεων. Άρα άκυρο.

 

Αλλα αξίζει τον κόπο να το δείξεις κάπου για να έρθουν και άλλοι developers.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τελείωσα φίλε το ComboBox καθώς και ότι άλλο μπορούσα να κάνω για τις λάμδα (κάνουν capture πίνακες και αντικείμενα, δουλεύουν σαν closures)

Έχει επιλογές για αυτόματη συμπλήρωση καθώς και για χρήση μόνο της λίστας.

Τώρα δουλεύει ως με ή χωρίς edit στο textBox, εδώ στη φωτογραφία το TextBox είναι για διόρθωση.

 

 

combo2.png

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ανανέωσα την ανάρτηση για First Class Functions με παράδειγμα με λάμδα συναρτήσεις.

 

 

 

 

\\ First-class functions
Print $("0.00")
RAD = lambda -> number/180*pi
ACOS = lambda RAD -> {
      Read x : x=Round(x,10)
      If x>=0 and x<1 Then {
            =RAD(2*Round(ATN(SQRT(1-x**2)/(1+x))) )
      }  Else.if x==1 Then {
            =0
      }  Else error "acos exit limit "
}
ASIN = lambda RAD -> {
    Read x : x=Round(x,10)
      If x>=0 and X<1 Then {
            =RAD(abs(2*Round(ATN(x/(1+SQRT(1-x**2))))))
      } Else.if x==1 Then {
            =RAD(90)
      } Else error "asin exit limit"
}
POW3 = Lambda ->number**3
POW3INV =Lambda ->number**(1/3)
COSRAD =lambda ->Cos(number*180/pi)
SINRAD=lambda ->SIN(number*180/pi)
'\ check
Print ACOS(COSRAD(.5)) , ASIN(SINRAD(.5)) , POW3INV(POW3(.5))
' \ pass a copy of each in array
Dim A(3), B(3)
A(0)=ACOS, ASIN, POW3INV
B(0)=COSRAD, SINRAD, POW3
For i=0 To 2 {
      Print A(i)(B(i)(.5)),
}

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Σήμερα είχα κέφια και είπα να γράψω μια ρουτίνα για διαιρέσεις με όσα δεκαδικά θέλουμε. Εκτός από δεκαδικά διατηρεί και όλα τα ακέραια ψηφία.

Την έχω ανεβάσει στο blog.

 

calcout1.png

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έχεις προσπαθήσει να προωθήσεις ένα υποσύνολο της M2000 για αντικατάσταση της ΓΛΩΣΣΑΣ; Αλλα θα έπρεπε να γράψεις βιβλίο ή δεν ξέρω τι. Η ΓΛΩΣΣΑ ειναι σκουπίδια.

  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Όταν γραφόταν ο Διερμηνευτής της Γλώσσας είχα μια συζήτηση με τον κατασκευαστή της και μάλιστα του είχα στείλει και τον κώδικα της Μ2000 (μιλάμε για το 2003).

Δες εδώ όπου η μικρή μου προτροπή πέρασε και η Γλώσσα απέκτησε κονσόλα για εισαγωγή (ήταν αρχικά μόνο για εξαγωγή)

 http://alkisg.mysch.gr/%CE%92%CE%BF%CE%AE%CE%B8%CE%B5%CE%B9%CE%B1/#pista

Δες στο Βελτιώσεις της έκδοσης 0.88α (21/08/2003) που με αναφέρει (εκεί που λέει Πρέβεζα)

Στο φόρουμ το έχω δείξει πολλά χρόνια τώρα. Βέβαια σήμερα η γλώσσα έχει προχωρήσει πάρα πολύ. Γιατί τα τελευταία δυο χρόνια έχω πολύ χρόνο στη διάθεσή μου. 

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

 

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

Έχω και ένα απλό σύστημα χρηστών όπου όταν μεταβαίνει κανείς στο όνομά του (γράφει Χρήστης Πέτρος) τότε ο κύριος κατάλογος είναι ο δικός του χωρίς να ασχολείται με περισσότερα και παράλληλα "κλειδώνουν" δυο εντολές που μπορεί να κάνουν ζημιά, όπως η Σύστημα (που είναι σαν το Run των Windows) και η Κονσόλα που καλεί το cmd.exe (σύγχρονα ή ασύγχρονα)

 

Με αυτές τις εντολές φτιάχνεις εξυπηρετικά script...για ότι θέλεις!

 

Σύστημα ή Win

 

π.χ. Θες να ανοίξει το C:

Win C:

ή το notepad

Win Notepad

 

win dir$  

ανοίγει ο φάκελος το χρήστη

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αναθεώρηση 209 και εφαρμογή NotePad σε Μ2000

Εκτός από txt αρχεία (αναγνωρίζει διάφορους τύπους), ανοίγει και Bas (τα αρχεία της Μ2000, και τα χρωματίζει για εκείνους που δεν έχουν την Vb6). Το έχω δοκιμάσει με 30000 γραμμές κώδικα...πάει μια χαρά!

 

 

vb2.png

 

vb1.png

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Να και ένα βίντεο! Το gsb αρχείο είναι utf-8 text αρχείο, το οποίο το έχω αφήσει στην επιφάνεια εργασίας. Με διπλό κλικ το έχω κάνει να ανοίγει με την Μ2000. (Όταν θέλουμε κάτι τέτοιο πρέπει ο κώδικας να έχει μια Show ή Άναψε όπως την λέω στα ελληνικά, εκτός από αυτή την περίπτωση που ανοίγω το παράθυρο modal, με "Show", 1 και έτσι δεν βλέπουμε καθόλου κονσόλα και επειδή τελευταία εντολή είναι η END θα κλείσει το πρόγραμμα)

 

Η M2000 έχει δικές της φόρμες διαλόγων για αρχεία, φακέλους, χρώματα, γραμματοσειρές, msgbox/inputbox και ανοίγει την standard φόρμα για ιδιότητες εκτυπωτή. Εδώ φαίνεται η χρήση της φόρμας για αρχεία.

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Να και ένα βίντεο! Το gsb αρχείο είναι utf-8 text αρχείο, το οποίο το έχω αφήσει στην επιφάνεια εργασίας. Με διπλό κλικ το έχω κάνει να ανοίγει με την Μ2000. (Όταν θέλουμε κάτι τέτοιο πρέπει ο κώδικας να έχει μια Show ή Άναψε όπως την λέω στα ελληνικά, εκτός από αυτή την περίπτωση που ανοίγω το παράθυρο modal, με "Show", 1 και έτσι δεν βλέπουμε καθόλου κονσόλα και επειδή τελευταία εντολή είναι η END θα κλείσει το πρόγραμμα)

 

Η M2000 έχει δικές της φόρμες διαλόγων για αρχεία, φακέλους, χρώματα, γραμματοσειρές, msgbox/inputbox και ανοίγει την standard φόρμα για ιδιότητες εκτυπωτή. Εδώ φαίνεται η χρήση της φόρμας για αρχεία.

 

Φίλε μπορείς να βάλεις σελίδα και το documentation της Μ2000 στο github μαζί με το αποθετήριο. Ακόμη σου συστείνω να μιλήσεις σε συνέδριο όπως FOSSDEMM και FOSSCOMM.

 

Έτσι θα τραβήξεις κόσμο.

 

Έχεις σκευτεί native port για linux;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στο github (είναι η αναθεώρηση 211 πια) δεν έχει  documentation..

Στο Blog υπάρχει στα ελληνικά (υπάρχουν 28 τεύχη και όλο το blog με τα παραδείγματα είναι για τον ίδιο σκοπό).

Θα προσθέσω και άλλα τεύχη. Δεν έχω βάλει για παράδειγμα την χρήση των sprites. Αν και έχω χρησιμοποιήσει τέτοια στο Pong.

 

Παλαιότερα είχα φτιάξει και ένα IDE, αλλά επειδή ήταν γραμμένο για μη Unicode περιβάλλον το παράτησα και επικεντρώθηκα στον εσωτερικό διορθωτή. Όμως θα μπορούσε κάποιος να χρησιμοποιήσει κάποιον εξωτερικό. Το m2000.exe δέχεται το όνομα μαζί με το μονοπάτι, αρχείου με κατάληξη gsb και το τρέχει άμεσα. Πρέπει να βάλουμε στο τέλος το όνομα του τμήματος που θα τρέξει πρώτο μετά μια εντολή τέλος

 

π.χ. Α : Τέλος

Αλλά μέσα στην Α θα πρέπει να παίξει μια Άναψε ή Show αλλιώς τρέχει χωρίς εμφάνιση κονσόλας, και αυτή θα εμφανιστεί μόνο αν ζητήσουμε εισαγωγή στη κονσόλα!

 

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

Όποιος θέλει να ασχοληθεί με το Port της Μ2000 σε Linux, ας το κάνει! Ας είναι ένα υποσύνολο. Θα βοηθήσω οπωσδήποτε! Όμως μιλάμε για interpreter. Δεν έχω ιδέα να γίνει ποτέ compiler. Το Notepad παίζει μια χαρά και ο κώδικας είναι KaraText, Ούτε Tokens δεν χρησιμοποιώ. Άμεση εκτέλεση!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Βίντεο από δοκιμές:

Ανοίγω ένα κείμενο 35000 γραμμών, και το χρωματίζει αυτόματα (οι λέξεις έχουν δοθεί στο πρόγραμμα της Μ2000 και αυτό ρυθμίζει το EditBox για να χρωματίζει κώδικα σε VB6)

έχω βελτιστοποιήσει το EditBox ώστε να χρωματίζει μόνο ότι φαίνεται! Αλλά ο χρωματισμός διατηρείται άν δεν αλλάξουμε την παράγραφο. Γενικά δουλεύει όλο το GUI χωρίς να τρώει επεξεργαστική ισχύ (μόνο στο άνοιγμα του αρχείου, είναι πάνω από ένα megabyte, ascii και το μετατρέπει σε UTF-16)

 

(Δεν χρησιμοποιώ στοιχεία ελέγχου της VB6, αλλά ένα δικό μου User Control που γίνεται όλα αυτά που χρησιμοποιώ. Εδώ είναι ο τίτλος, τα τρια μενού, η επιγραφή δίπλα από τα μενού που γράφει τρέχουσα γραμμή και θέση χαρακτήρα, ο επεξεργαστής κειμένου, και οι λίστες dropdown που ανοίγουν στα μενού.) 

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ανέβασα μια ωραία ανάρτηση για τις Λάμδα συναρτήσεις και την Σύλληψη μεταβλητών/αντικειμένων/πινάκων

Επίσης έχει και δεύτερο μέρος για δυνατά μυαλά, γιατί περιγράφει το πώς βοηθάει η λάμδα συνάρτηση (που καταχωρείται σε ιδιότητα) να προσθέσουμε συναρτήσεις σε αντικείμενα σε πίνακα που έχουμε δηλώσει ότι θα έχουν κοινές συναρτήσεις (φτιάχνοντας τον πίνακα με =ΚλάσηΑ() για όλα τα στοιχεία του). Στη Μ2000 οι πίνακες μπορούν να έχουν ό,τι αντικείμενο (ομάδα λέγεται στη Μ2000) θέλουμε, ή μπορούμε να έχουμε πίνακα με αντικείμενα με κοινές συναρτήσεις-μεθόδους (όχι υποχρεωτικά και ιδιότητες). Με τις λάμδα συναρτήσεις, επειδή μπαίνουν σε ιδιότητες, μπορούμε να παρακάμψουμε τον περιορισμό των κοινών συναρτήσεων-μεθόδων).

Ο λόγος που υπάρχουν οι δυο τρόποι χειρισμού των πινάκων με αντικείμενα (βασικού τύπου ομάδας) είναι για να μην κρατάμε πολλαπλά αντίγραφα συναρτήσεων/μεθόδων. Επίσης τα αντικείμενα στους πίνακες λέγονται "κλειστά" διότι κρατούν το περιεχόμενό τους απροσπέλαστο, δηλαδή δεν είναι καν στο σύστημα μεταβλητών/συναρτήσεων. Όταν χρησιμοποιούμε ένα τέτοιο αντικείμενο τότε ανοίγει κάνουμε τη δουλειά μας και κλείνει. Το άνοιγμα δηλαδή του δίνει πρόσκαιρα όνομα, και βάζει ότι έχει στο σύστημα για να χρησιμοποιηθεί. Ένα αντικείμενο που φτιάξαμε με όνομα δεν έχει αυτή την διαδικασία, παραμένει ανοικτό μέχρι να τερματίσει το τμήμα που το φτιάξαμε, να βγει εκτός σκοπού. Αντίθετα ένα αντικείμενο σε πίνακα θα χαθεί αν βγει ο πίνακας εκτός σκοπού, ή αν βάλουμε στην θέση του ένα άλλο! Στη Μ2000 δεν κρατάμε τα αντικείμενα με δείκτες. Υπάρχουν δείκτες ως ισχνές αναφορές, χωρίς δηλαδή μέτρηση έτσι ώστε να κρατούν ζωντανό ένα αντικείμενο. 

Τα αντικείμενα, τα κλειστά που μπορούν να μετακινηθούν, εκτός από θέσεις σε πίνακες μπορούν να μπουν στο σωρό τιμών (άρα να περαστούν ως τιμές σε κλήσεις τμημάτων-συναρτήσεων-ρουτινών), ή μπορούν να επιστραφούν από συναρτήσεις. Έτσι εκτός από την Κλάση Άλφα { Χ=10 } που δίνει ένα αντικείμενο με μια ιδιότητα Χ=10,  θα μπορούσαμε να είχαμε αυτό:

Συνάρτηση Άλφα {

    Ομάδα Μ { Χ=10}

    =Μ

}

Κάνει το ίδιο πράγμα με την Άλφα. Η διαφορά είναι ότι όταν φτιάχνουμε την Κλάση Άλφα τότε στην κλήση της αναζητεί το εσωτερικό τμήμα Άλφα ως κατασκευαστή.

π.χ.

Κλάση Άλφα {

     Χ

     Τμήμα Άλφα {

         Διάβασε .Χ

     }

}

 

Β=Άλφα(10)

 

Το ίδιο κάνουμε και με αυτήν:

Συνάρτηση Άλφα {

   Ομάδα Μ { Χ

        Τμήμα Άλφα {

            Διάβασε .Χ

         }

   }

   Διάβασε Μ.Χ

   =Μ

}

Θα μπορούσαμε να παραλείψουμε το Τμήμα Άλφα στην Ομάδα Μ. Στην περίπτωση με τη Κλάση δεν γίνεται!


Να σημειώσω ότι στην αναθεώρηση 216 έχω βάλει την Print και την Call με κλήση απευθείας με function pointer μέσα από την VB6 (γίνεται με ένα μυστήριο τρόπο μέσω User32 και CallWindowProcW) και ελάχιστη διαφορά ταχύτητας υπάρχει. Απλά δουλεύει το σύστημα και μάλλον θα φτιάξω και άλλες εντολές να εκτελούνται άμεσα (όχι βάσει του Select Case).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τα αντικείμενα, τα κλειστά που μπορούν να μετακινηθούν, εκτός από θέσεις σε πίνακες μπορούν να μπουν στο σωρό τιμών (άρα να περαστούν ως τιμές σε κλήσεις τμημάτων-συναρτήσεων-ρουτινών), ή μπορούν να επιστραφούν από συναρτήσεις. 

 

Τι είναι τα κλειστά αντικείμενα; Υπάρχουν και ανοιχτά; Και τι σημαίνει;

 

Είναι άλλο συνάρτηση άλλο τμήμα και άλλο ρουτίνα; Σε τι διαφέρουν;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Επισκέπτης
Αυτό το θέμα είναι πλέον κλειστό για περαιτέρω απαντήσεις.
  • Δημιουργία νέου...