Συμφωνώ με τους προλαλήσαντες στο ότι η εκχώρηση ακέραιας σε πραγματική είναι σωστή (κάθε ακέραιος είναι και πραγματικός), αλλά το αντίστροφο είναι λάθος.
Το ερωτημά μου είναι γιατί είναι συντακτικό λάθος (αν καταλαβαίνω καλά από την συζήτηση); Ποιος συντακτικός κανόνας παραβιάζεται;
Στη σύνταξη των εντολών εκχώρησης θέλουμε μεταβλητή <- έκφραση και έκφραση <- έκφραση τελεστής έκφραση | μεταβλητή | σταθερά (δεν θυμάμαι καλά τα BNF)
και στη κλήση παραμέτρων απλά μια λίστα από ονόματα χωρισμένα με κόμμα. Δεν υπάρχει πληροφορία τύπων πουθενα.
Επίσης αν θυμάμαι καλά ο type checker (αν υπάρχει) έρχεται μετά από τον συντακτικό αναλυτή.
Αν έπρεπε να αιτιολογηθεί το λάθος, θα έλεγα ότι παραβιάζεται η σημασιολογία της γλώσσας, που μάλλον θα οδηγούσε σε λάθος αντικανονικού τερματισμού.
Τώρα σχετικά με την αλλαγή του μετρητή, τα έχουμε ξανασυζητήσει.
Μερικές φορές καλέ/ή μου φίλε/η η λογική είναι παράξενο πράγμα.
Στο έγγραφο ΥΠΕΠΘ 43652 / Γ2 / 20 - 4 - 2010 αναφέρει ότι
Όσον αφορά τη μεταβολή του μετρητή μιας ΓΙΑ μέσα στο βρόχο του, δεύτερη υπόδειξη της σελίδας 78 του Τετραδίου Μαθητή αναφέρεται:
«Ποτέ μην χρησιμοποιείς εντολές που αλλάζουν την αρχική τιμή, την τελική τιμή, το βήμα ή τημεταβλητή που ελέγχει την επανάληψη μέσα σε ένα βρόχο ΓΙΑ. Αν και μερικές γλώσσες προγραμματισμού επιτρέπουν αυτές τις αλλαγές, να τις αποφεύγεις, γιατί οδηγούν σε προγράμματα δυσνόητα και συνήθως λανθασμένα». Από το απόσπασμα αυτό προκύπτει ότι η ΓΛΩΣΣΑ δεν περιλαμβάνεται στις «μερικές γλώσσες προγραμματισμού».
Για μένα λογική είναι η ερμηνεία ότι δεν επιτρέπεται μεταβολή του i. Δεν είναι συντακτικό λάθος η εκχώρηση στο i της ίδιας του της τιμής, ούτε αντίστοιχα, η χρήση του σε παράμετρο διαδικασίας που δεν την μεταβάλλει.
Νομίζω σωστότερη ερμηνεία είναι το δεν συνίσταται. Επίσης αν ήταν λάθος, δεν θα έλεγε παραπάνω 'συνήθως λανθασμένα', θα έλεγε πάντα λανθασμένα ή λανθασμένα.
Άλλο όμως το δεν συνίσταται, άλλο το να είναι λάθος και μάλιστα συντακτικό.
Οι εκχώρησεις
i<- i
i<- i + 1
είναι ολόιδιες για την γλώσσα. Και οι δύο αλλάζουν το i, απλά η πρώτη του βάζει την ίδια τιμή.
Μέσα σε ένα ΓΙΑ και πριιν την εκτέλεση δεν υπάρχει τρόπος να γνωρίζει ο μεταγλωττιστής αν το ι θα έχει την ίδια τιμή με πριν γιατί μπορεί να μεσολαβεί μια διαδικασία όπως η Παράλογος_Κόσμος ή κάτι ανάλογο. Οπότε είτε θα τα επιτρέψεις και τα δύο είτε κανένα (πάντα ως σύσταση).