Call by copy-restore—also known as "copy-in copy-out", "call by value result", "call by value return"
Under call by reference, writing to one will affect the other; call by copy-restore avoids this by giving the function distinct copies, but leaves the result in the caller's environment undefined depending on which of the aliased arguments is copied back first—will the copies be made in left-to-right order both on entry and on return?
Σίγουρα σχεδιάζοντας μια θεωρητική γλώσσα σε χαρτί δεν μπορεί κανείς να προβλέψει όλες τις λεπτομέρειες που θα χρειαστεί να αποσαφηνιστούν κατά την υλοποίηση.Αυτό που καταλαβαίνω είναι ότι το πρόβλημα δεν υπάρχει μόνο στο μάθημα, αλλά σε όλες τις γλώσσες που χρησιμοποιούν αυτό τον μηχανισμό μεταβίβασης. Γνωρίζει κάποιος αν υπήρχε κάποιος τρόπος να αντιμετωπιστεί αυτό το πρόβλημα εκεί;
Στο συγκεκριμένο, προσωπικά σκέφτηκα ως εξής: είναι πιο φυσιολογικό να μπουν οι παράμετροι από τα αριστερά προς τα δεξιά, όπως και στην ιεραρχία των πράξεων κλπ. Για παράδειγμα, αν είχαμε π.χ. ΚΑΛΕΣΕ ΔιαδικασίαΔ(ΣυνάρτησηΑ(α), ΣυνάρτησηΒ(β)), και κάναμε πίνακα τιμών, θα θέλαμε να εκτελεστεί πρώτα η κλήση της συνάρτησης Α και μετά της συνάρτησης Β.
Αν δεχτούμε το "μπαίνουν από αριστερά προς τα δεξιά" ως σωστό, τότε λόγω της στοίβας κλήσης παραμέτρων, που εκτός του ότι ισχύει παντού περιγράφεται και στο βιβλίο, κατά την απώθηση από τη στοίβα θα βγουν αντίθετα, από δεξιά προς τα αριστερά. Σε αυτό το δεύτερο κομμάτι δεν νομίζω ότι υπάρχει δυνατότητα για πολλές ερμηνείες, θα είναι αφύσικο να παραβιαστεί η λειτουργία της στοίβας για να βγουν από αριστερά προς τα δεξιά.
Γι' αυτό και στο Διερμηνευτή η τελική τιμή είναι 2...
Αν θέλετε κάτι πραγματικά μυστήριο, είναι το αποτέλεσμα του -3^2 και το 0-3^2 καθώς και το 0+-3^2.
Α περίμενε, δεν έχει πρόβλημα η python με τέτοια. Βάζω και βλέπω πως το κάνει έτσι κι αλλιώς. Ακόμα και pascal να είχα, έβαζα κι έβλεπα το πως.
x <- 1
ΟΣΟ x > 0 ΕΠΑΝΑΛΑΒΕ
x <- x/2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Και το 0^0 θα περίμενε κάποιος μαθητής να δώσει κάτι άλλο από αυτό που δίνει ο διερμηνευτής.
Σημαίνει ότι ο διερμηνευτής δεν έπρεπε να έχει αυτήν την σύμβαση ή ότι αναγκαστικά είναι παράλειψη της ΓΛΩΣΣΑΣ;
Και το 1/3*3 δεν παράγει το "αναμενόμενο" αποτέλεσμα. Είναι και αυτό παράλειψη της ΓΛΩΣΣΑΣ;
x <- 1
ΟΣΟ x > 0 ΕΠΑΝΑΛΑΒΕ
x <- x/2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Δηλαδή η χρήση python ή οποιασδήποτε άλλης γλώσσας δεν μας απαλλάσσει από ασάφειες.Άλκη ναι συμφωνω! Νομίζω το αναφέρω και στο αντίστοιχο thread. Πρέπει να πλαισιωθεί ορθά η python για να δουλέψει σωστά κι αν μη τι άλλο, υπάρχει ένα manual κι ένα IDLE που θα συμπεριφερθεί ανάλογα. Μιλάμε για ίδιο Version. Και μάλιστα το μάθημα μπορεί να επικαιροποιείτε με απλές ενημερώσεις των αναγκαίων (αν υπάρξουν) από ένα change log. Όχι με νέους τόμους.
Είναι δουλειά των θεματοδοτών το να μην μπουν τέτοια θέματα σε εξετάσεις, τουλάχιστον μέχρι να διευκρινιστούν από το Υπουργείο.
Και δουλειά των καθηγητών να ερμηνεύουν το βιβλίο σαν βιβλίο και όχι σαν βίβλο. Το "η τάδε ανθυποπερίπτωση δεν αναφέρεται ρητά στο βιβλίο" μπορεί απλά να σημαίνει ότι εξυπακούεται, όχι ότι απαγορεύεται.
Για να μην παρεξηγηθώ, κι εγώ προτιμώ τη διδασκαλία της Python, αλλά και ασάφειες έχει και περιορισμό ύλης θα χρειαστεί κλπ, δεν είναι πανάκεια.