Η συμβατότητα του μικρόκοσμού μας με το περιβάλλον της LOGO εστιάστηκε στο προγραμματιστικό και στο εννοιολογικό πεδίο. Προσπαθήσαμε δηλαδή να αξιοποιήσουμε μερικές από τις εμπειρίες, που είχανε αποκτήσει κάνοντας προγραμματισμό στο περιβάλλον της LOGO. Αυτές αφορούσαν την σύνταξη των εντολών, την χρήση παραμέτρων σαν εισόδους στις διαδικασίες τους και στην ερμηνεία των διαφόρων μηνυμάτων που εμφανίζονται στη LOGO.
Επιπλέον αξιοποιήσαμε τις έννοιες που είχαν χρησιμοποιήσει μέσα στο περιβάλλον της LOGO. Αυτές αφορούσαν τις έννοιες που περιέχει η γεωμετρία της χελώνας και ότι κάθε εντολή κάνει μία και μόνο λειτουργία.
Οι αγκύλες χρησιμοποιούνται, για να ομαδοποιήσουν μία σειρά από λέξεις
σε μία λίστα.
Τέλος οι άνω-κάτω τελείες χρησιμοποιούνται από την LOGO για να δηλώσουν
ότι η λέξη που ακολουθεί μετά από αυτές, είναι το όνομα κάποιας μεταβλητής.
Αυτή μπορεί να χρησιμοποιηθεί για υπολογισμούς, σαν παράμετρος κάποιας
διαδικασίας...
Οι εντολές του μικροκόσμου μας χρησιμοποίησαν τον ίδιο τρόπο σύνταξης για τις εισόδους τους, διατηρώντας συμβατότητα με το περιβάλλον της LOGO. Η πρώτη εντολή στο μικρόκοσμο μας είναι η TAG. Αυτή δίνει ένα όνομα στο σχήμα που παράγεται από μία διαδικασία. Δέχεται δύο εισόδους, η πρώτη είναι το όνομα της διαδικασίας με τις παραμέτρους της (αν υπάρχουν) και η δεύτερη είναι το όνομα που δίνουμε στο σχήμα.
Αν η διαδικασία δεν δέχεται παραμέτρους, τότε σύμφωνα με την σύνταξη των εντολών της LOGO, το όνομα της διαδικασίας μπορεί να δοθεί βάζοντας αμέσως μπροστά από αυτό εισαγωγικά. Αν η διαδικασία παίρνει παραμέτρους, τότε το όνομα και οι παράμετροί της πρέπει να μπουν σε μια λίστα, χρησιμοποιώντας αγκύλες. Αυτές όμως μπορούν να χρησιμοποιηθούν και για μία μόνο λέξη, θεωρώντας ότι η λίστα αποτελείται από ένα μόνο στοιχείο.
Το όνομα του σχήματος, είναι μία λέξη. Άρα πρέπει να βάλουμε πριν από αυτό εισαγωγικά. Το όνομα αυτό όμως, δεν μπορεί να περιέχει παραπάνω από μία λέξεις - να χρησιμοποιούσαμε δηλαδή λίστα - επειδή έτσι θα εννοούσαμε ότι το σχήμα μπορεί να πάρει πολλά ονόματα.
Αν έχουμε μια διαδικασία HOUSE που κατασκευάζει ένα σπίτι και θέλουμε να δώσουμε στο σχήμα της το όνομα SPITI τότε μπορούμε να δώσουμε: TAG "HOUSE "SPITI
Μπορούμε επίσης να δώσουμε και TAG [HOUSE] "SPITI
Αν έχουμε μια διαδικασία που κατασκευάζει τετράγωνα διαφόρων μεγεθών, ορισμένη σαν SQUARE :X, όπου :X το μήκος πλευράς του τετραγώνου, τότε πρέπει να χρησιμοποιήσουμε υποχρεωτικά τις αγκύλες. Μπορούμε έτσι να πούμε TAG [SQUARE 10] "TETRAGONO
Μία εντολή της APPLE LOGO, που είναι αντίστοιχη με την TAG, είναι η
SAVEL. Αυτή σώζει στο δίσκο μία ομάδα διαδικασιών που τις έχουμε τοποθετήσει
σε μια λίστα. Για παράδειγμα, έστω ότι έχουμε τις διαδικασίες SQUARE, TRIANGLE
και HOUSE και θέλουμε να σώσουμε τις δύο πρώτες σε ένα αρχείο. Τότε πρέπει
να τις βάλουμε σε μια λίστα και να τις σώσουμε στο δίσκο σε ένα αρχείο
με το όνομα πχ. SXHMATA δίνοντας την εντολή:
SAVEL [SQUARE TRIANGLE] "SXHMATA
Έτσι βλέπουμε μια αντιστοιχία ανάμεσα στις δύο εντολές, αφού και δύο
δέχονται σαν είσοδο μια λίστα και ένα όνομα.
Η επόμενη εντολή του μικρόκοσμού μας είναι η GET. Αυτή λέει στη χελώνα
να πιάσει ένα σχήμα με το όνομα που του έχει δώσει η TAG. Η GET δέχεται
μία είσοδο η οποία είναι το όνομα του σχήματος που θέλουμε να πιάσει η
χελώνα. Επειδή αναφερόμαστε σε ένα όνομα, πρέπει να χρησιμοποιήσουμε εισαγωγικά.
Αν για παράδειγμα έχουμε δώσει το όνομα TETRAGONO στο σχήμα της διαδικασίας
SQUARE 10, τότε μπορούμε να πούμε να πιάσει αυτό το σχήμα δίνοντας την
εντολή:
GET "TETRAGONO
Αντίστοιχη εντολή της LOGO είναι LOAD η οποία φορτώνει ένα αρχείο.[2]
Και αυτή δέχεται σαν είσοδο το όνομα του αρχείου που θέλουμε να φορτώσουμε.
Για παράδειγμα αν έχουμε ένα αρχείο με όνομα DEMO δίνουμε:
LOAD "DEMO
Η επόμενη εντολή είναι η SET. Αυτή λέει στη χελώνα πόσο πρέπει να μετακινήσει
το σχήμα που κρατάει η χελώνα. Έχει μία είσοδο, η οποία είναι λίστα που
περιέχει δύο αριθμούς. Οι αριθμοί είναι μία ειδική περίπτωση ονόματος.
Δεν απαιτούνται τα εισαγωγικά, τα οποία εννοούνται. Αν θέλουμε να μετακινήσουμε
το σχήμα 10 βήματα δεξιά και 10 βήματα πάνω τότε λέμε:
SET [10 10]
Αν θέλουμε να πάει αριστερά ή κάτω χρησιμοποιούμε το (-). Η εντολή SET
είναι αντίστοιχη με την εντολή SETPOS της LOGO. Αυτή τοποθετεί την
χελώνα στις γραφικές συντεταγμένες, που της ορίζουμε. Εδώ οι αριθμοί αναφέρονται
στις αποστάσεις από το κέντρο της οθόνης. Η σύνταξή της είναι ακριβώς ίδια
με την SET. Και εδώ όταν θέλουμε να πάμε αριστερά ή κάτω από το κέντρο
της οθόνης βάζουμε πάλι (-). Μπορούμε δηλαδή να πούμε στη χελώνα να πάει
10 βήματα κάτω από το κέντρο και 20 βήματα δεξιά του λέγοντας:
SETPOS [-10 20]
Ανάμεσα στις δύο εντολές υπάρχει εννοιολογική συνάφεια. Και οι δύο προκαλούν μετακίνηση, η πρώτη μετακινεί σχήματα ενώ η δεύτερη την χελώνα. Επίσης, και οι δύο χρησιμοποιούν την έννοια των συντεταγμένων. Στην SETPOS όμως είναι απόλυτες ενώ στη SET σχετικές με τη θέση της χελώνας.
H εντολή SHAPES είναι operation και έχει σαν έξοδο μία λίστα, που αποτελείται από τα ονόματα των σχημάτων τα οποία βρίσκονται στην οθόνη. Το κάθε σχήμα έχει πάρει το όνομά του από την εντολή TAG.
Έστω, για παράδειγμα, ότι έχουμε στην οθόνη τα σχήματα TETRAGONO και
SPITI. Τότε αν ζητήσουμε να μας τυπώσει τα ονόματα των σχημάτων που βρίσκονται
στην οθόνη θα έχουμε
PR SHAPES
TETRAGONO SPITI
Η σύνταξή της είναι ακριβώς όμοια με την σύνταξη της BURIEDNAMES. Η
εντολή αυτή της Macintoch LOGO επιστρέφει σαν έξοδο μια λίστα με τα ονόματα
των μεταβλητών, που είναι κρυμμένες με την εντολή BURYNAME ή την
εντολή BURYALL.
Τέλος η operation CURRENT επιστρέφει το όνομα του σχήματος που κρατάει
η χελώνα. Είναι το όνομα του τελευταίου σχήματος, που έχει "πιαστεί" από
την χελώνα μέσω της GET.
Έτσι αν είχαμε κάνει GET "SPITI και αργότερα δεν γνωρίζαμε ποιο σχήμα
κρατάει η χελώνα, τότε μπορούσαμε να ζητήσουμε να μας τυπώσει το τρέχων
σχήμα λέγοντας
PR CURRENT
SPITI
Μια εντολή της LOGO, αντίστοιχη με την CURRENT είναι η PREFIX η οποία
επιστρέφει το όνομα του τρέχοντος δίσκου.
Για όλες τις εντολές του μικρόκοσμού μας προσπαθήσαμε να ακολουθήσαμε
τον τρόπο σύνταξης και τα σημεία στίξης που χρησιμοποιεί η LOGO για την
σύνταξη των εντολών της. Πετύχαμε έτσι να υπάρχουν αντιστοιχίες ανάμεσα
στις εντολές μας και στις εντολές της LOGO. Η αντιστοιχία δεν περιοριζόταν
μόνο στο συντακτικό κομμάτι των εντολών, αλλά και στην εννοιολογική τους
δομή.
Η πληροφορία που εμπεριέχεται σε ένα μήνυμα λάθους είναι:
Οι πιο συνηθισμένες εκφράσεις μηνυμάτων λάθους είναι οι ακόλουθες:
Για παράδειγμα
SET [3]
SET DOESN’T LIKE [3] AS INPUT
H SET έχει σαν είσοδο μία λίστα με δύο συντεταγμένες. Το είδος του
λάθους είναι ότι δεν είναι σωστές οι είσοδοι της διαδικασίας. Η έκφραση
στην οποία υπάρχει το λάθος είναι το [3]. Τέλος η διαδικασία, στην οποία
δεν ταιριάζουν οι είσοδοι, είναι η SET γιατί η λίστα που δέχτηκε σαν είσοδο,
περιείχε μόνο τη μία από τις συντεταγμένες που απαιτούσε.
Το μήνυμα "... IS UNDEFINED" παρουσιάζεται όταν ζητηθεί κάτι που δεν
έχει ορισθεί. Για παράδειγμα όταν ζητήσουμε να τυπωθεί (Print Out) ο κώδικας
μίας διαδικασίας δίνοντας PO "xxx και δεν υπάρχει η διαδικασία xxx, τότε
εμφανίζεται το μήνυμα
xxx IS UNDEFINED
Αντίστοιχο μήνυμα παρουσιάζεται στο πρόγραμμά μας όταν ζητήσουμε στη
χελώνα να πιάσει κάποιο σχήμα που δεν υπάρχει. Για παράδειγμα αν
ζητήσουμε να "πιάσει" η χελώνα ένα σχήμα HOUSE, το οποίο δεν είναι ορισμένο
τότε θα συμβεί το εξής:
GET "HOUSE
HOUSE IS UNDEFINED
Το μήνυμα αυτό λέει ότι το είδος του λάθους είναι ότι δεν έχει οριστεί
κάτι. Επίσης μας λέει η έκφραση στην οποία παρουσιάζεται το λάθος είναι
το HOUSE.
Το μήνυμα "I DON’T KNOW HOW TO ..." εμφανίζεται θέλουμε να εκτελέσουμε
μία διαδικασία, που δεν έχει οριστεί. Παρόμοιο μήνυμα εμφανίζεται και στο
πρόγραμμά μας όταν ζητηθεί από την χελώνα να μετακινήσει κάποιο σχήμα,
χωρίς προηγουμένως να έχει επιλεχθεί κάποιο. Για παράδειγμα
CS
SET [10 10]
I DON’T KNOW WHAT SHAPE TO SET
Εδώ με το CS καθάρισε η οθόνη και χάθηκαν όλα τα σχήματα που υπήρχαν.
Έτσι η χελώνα δεν "κρατάει" πια κανένα σχήμα. Το μήνυμα που εμφανίστηκε
μας λέει πρώτον ότι η χελώνα δεν κρατάει κάποιο σχήμα. Κατόπιν μας λέει
ότι στην έκφραση SET παρουσιάστηκε το λάθος.
Παρόλο που τα μηνύματα "I DON’T KNOW HOW TO SQURE" και "I DON’T KNOW WHAT SHAPE TO SET" δεν αποτελούνται ακριβώς από τις ίδιες λέξεις, καθώς μόνο ορισμένες ταιριάζουν μεταξύ τους ("I DON’T KNOW ... TO ..."), το μήνυμα του μικρόκοσμού μας δίνει όλες τις πληροφορίες που παρέχουν και τα μηνύματα της LOGO, με τον ίδιο τρόπο.
Η προσπάθεια να τυπώνονται παρόμοια μηνύματα έγινε για να έχει ο μικρόκοσμός
μας συμβατότητα με το περιβάλλον της LOGO και προγραμματιστική (χρησιμοποιώντας
παρόμοιες λέξεις) αλλά και εννοιολογική (δίνοντας ότι πληροφορίες δίνει
και η LOGO). Επίσης έγινε για παιδαγωγικούς σκοπούς για να μην μπλέκονται
τα παιδιά, τα οποία είναι συνηθισμένα να ερμηνεύουν το νόημα των μηνυμάτων
της LOGO. Έτσι τους δίνεται η δυνατότητα να καταλάβουν εύκολα τα συντακτικά
λάθη τους και να απασχοληθούν περισσότερο με το γνωστικό αντικείμενο.
Command είναι μία διαδικασία η οποία δεν έχει σαν έξοδο κάποια τιμή αλλά έχει κάποιο αποτέλεσμα, όπως να τυπώνει κάτι πάνω στην οθόνη να μετακινεί την χελώνα ή να κάνει έναν ήχο", εκτελεί δηλαδή μία λειτουργία. Επισημαίνει επίσης ότι "μερικές commands έχουν αποτελέσματα, τα οποία δεν είναι φανερά στην οθόνη, αλλά αντί για αυτό αλλάζουνε κάτι εσωτερικά στο υπολογιστή, το οποίο μπορεί να χρησιμοποιηθεί αργότερα στο πρόγραμμα". Για παράδειγμα η SETPC (SET Pen Color) αλλάζει το χρώμα με το οποίο γράφει η χελώνα. Το αποτέλεσμα δεν είναι άμεσα αντιληπτό αλλά φαίνεται αργότερα καθώς ζωγραφίζουμε.
Όσον αφορά τις εντολές του μικρόκοσμού μας οι TAG GET SET είναι commands. Κάθε μία από αυτές εκτελεί μία συγκεκριμένη λειτουργία και δεν επιστρέφουν κάποια έξοδο, που θα χρησιμοποιούσαν άλλες διαδικασίες.
Η λειτουργία της TAG είναι να δίνει ένα όνομα στο σχήμα που παράγεται
από μία διαδικασία και δεν επιστρέφει καμία έξοδο. Εάν η TAG ήταν
operation, τότε θα έδινε σαν έξοδο το όνομα του σχήματος, σε σχέση με το
όνομα της διαδικασίας και τις παραμέτρους της. Για παράδειγμα θα μπορούσαμε
να δώσουμε: PR TAG [TETRAGONO]. Εδώ ένα πιθανό αποτέλεσμα θα ήταν:
TETRAGONO.01. Το όνομα του σχήματος όμως, δεν θα μπορούσε να το ορίσει
ο χρήστης και θα ήταν κάτι "έξω από αυτόν" και πιθανώς όχι αντιπροσωπευτικό
του σχήματος. Επίσης δεν θα ήταν εύκολος ο χειρισμός των σχημάτων, γιατί
με κάθε TAG θα έπρεπε να γίνει ταυτόχρονα και εκτύπωση του ονόματος. Τέλος
δεν υπάρχει κάτι αντίστοιχο στη LOGO. Έτσι τα προβλήματα κατανόησης της
εντολής θα ήταν πιθανώς αρκετά.
Η GET λέει στη χελώνα να πάει να "πιάσει" ένα σχήμα που έχει ένα συγκεκριμένο όνομα. Το αποτέλεσμα αυτής της εντολής δεν είναι άμεσα φανερό στην οθόνη, αλλά δηλώνει στην χελώνα ποιο σχήμα κρατάει και μπορεί να μετακινεί. Βέβαια αν η χελώνα δεν κρατάει το σχήμα, τότε πηγαίνει πάνω σ’ αυτό.
Τέλος η SET μετακινεί το σχήμα που "κρατάει" η χελώνα όσο της ορίσουμε. Εδώ η λειτουργία είναι συγκεκριμένη και το αποτέλεσμά της είναι πάντα φανερό στην οθόνη.
Αντίθετα οι SHAPES CURRENT είναι operations επιστρέφοντας κάποια τιμή.
Η SHAPES επιστρέφει μία λίστα με τα ονόματα των σχημάτων που βρίσκονται
στην οθόνη. Αυτή τη λίστα αν θέλουμε, μπορούμε να την επεξεργαστούμε. Μπορούμε
για παράδειγμα να την εκτυπώσουμε ολόκληρη, να εκτυπώσουμε ένα ένα τα στοιχεία
της, να την χρησιμοποιήσουμε μέσα από άλλες διαδικασίες βάζοντας για παράδειγμα
τη χελώνα να πιάσει διαδοχικά όλα τα σχήματα και να τα μετακινήσει, και
να κάνουμε οτιδήποτε άλλο χρειαστούμε. Αν η operation SHAPES είχε γίνει
command η οποία απλά θα εκτύπωνε τα ονόματα των σχημάτων, για παράδειγμα
POSHAPES (Print Out SHAPES), δεν θα είχαμε την δυνατότητα για καμία επεξεργασία
στη λίστα των ονομάτων.
Για τους ίδιους λόγους έγινε και η CURRENT operation. Αυτή επιστρέφει
το όνομα του σχήματος που κρατάει η χελώνα.
Με το όρο primitive εννοεί "όλες τις αρχικές εντολές" με τις οποίες είναι εφοδιασμένη η γλώσσα. Το έργο αυτών που προγραμματίζουν σε LOGO είναι "να προσθέσουν στο ρεπερτόριο της LOGO νέες διαδικασίες, ορισμένες από τους ίδιους".
Δίνοντας τις εντολές του μικρόκοσμού μας στα παιδιά θέλαμε να τις χρησιμοποιήσουν σαν primitive καθώς προγραμματίζουν. Αυτό το κάναμε γιατί οι εντολές αυτές εμπεριέχουν έννοιες της καρτεσιανής γεωμετρίας και του object oriented προγραμματισμού που θέλαμε να τους μάθουμε.
Τα primitive όμως για να γίνουν κατανοητά, πρέπει να είναι απλά. Πρέπει δηλαδή το καθένα να εκτελεί μία και μόνο "στοιχειώδη" λειτουργία. Τα παιδιά μπορούν να τα χρησιμοποιήσουν, για να φτιάξουν πιο πολύπλοκες διαδικασίες, που και αυτές είναι ισοδύναμες με τα primitive, λόγω της ισοδυναμίας διαδικασιών και primitive που έχει η LOGO. Όπως λέει και ο Schwartz[3] "μπορούν να φτιάξουν σύνθετα "primitive" για ειδικούς σκοπούς, χρησιμοποιώντας κάποια απλά. Μοναδικοί περιορισμοί που τίθενται είναι το ταλέντο και η φαντασία τους".
Ο διαχωρισμός των διαφόρων λειτουργιών, ήταν απαραίτητος να γίνει κατά το σχεδιασμό του προγράμματός μας, γιατί έτσι τα παιδιά θα αντιμετώπιζαν κάθε φορά μόνο κάποιες απλές, οι οποίες ήταν εύκολο να κατανοηθούν. Έτσι κάθε εντολή σχεδιάστηκε να εκτελεί μία και μόνο απλή λειτουργία. Οι λειτουργίες που εκτελούνται είναι οι ακόλουθες:
Έτσι πετύχαμε σε ένα ακόμη τομέα συμβατότητα με το περιβάλλον της LOGO,
αφού όλα τα primitive της LOGO εκτελούν μία απλή λειτουργία.
Όπως σε όλες τις εντολές της γεωμετρίας της χελώνας, έτσι και στη SET αναφερόμαστε μόνο στη διαφορά ανάμεσα στο πού είναι η χελώνα τώρα και πού θα πάει μετά από λίγο, μετακινώντας το σχήμα. Αυτό είναι που κάνει και την SET "διαφορική".
Επιπλέον, στο επίπεδο της οθόνης υπάρχουν συστηματικά τοποθετημένα σημεία. Τα σημεία αυτά, όπως και στην εσωγενή γεωμετρία, δεν έχουν απόλυτο τρόπο περιγραφής. Δεν μπορούμε δηλαδή να τα περιγράψουμε σε σχέση με κάποιο σταθερό σημείο (αρχή αξόνων).
Έτσι, η γεωμετρία του μικρόκοσμού μας είναι συμβατή με την εσωγενή γεωμετρία, που ξέρουν τα παιδιά από την εμπειρία τους πάνω στη LOGO. Αυτό που θέλουμε να χρησιμοποιήσουν τα παιδιά, για να αρχίσουν να κατανοούν τις καρτεσιανές συντεταγμένες, είναι τα συστηματικά τοποθετημένα σημεία, τα οποία τα βοηθούν στον ακριβή προσδιορισμό των αποστάσεων.
Ο σχεδιασμός των primitive του μικροκόσμου έγινε με σκοπό να συσχετίσουν
τα παιδιά τις νέες εντολές, με κάποιες που ήδη ήξεραν. Οι νέες αυτές εντολές
έπρεπε να είναι συμβατές με τα primitive της LOGO. Διαφορετικά υπήρχε κίνδυνος
να δημιουργηθεί σύγχυση από την διαφορά μεταξύ των αρχικών εντολών, που
ήδη γνώριζαν, και των καινούργιων. Στην συνέχεια σκοπός μας ήταν τα παιδιά,
χρησιμοποιώντας τις νέες εντολές και παίζοντας με αυτές, να εξοικειωθούν
με τις έννοιες που θέλουμε να μάθουν.