Κλήση διαδικασίας με ίδιες παραμέτρους

Ξεκίνησε από Καραμαούνας Πολύκαρπος, 10 Φεβ 2020, 01:51:43 ΜΜ

« προηγούμενο - επόμενο »

Καραμαούνας Πολύκαρπος

Υπάρχει καμία επίσημη οδηγία για αυτήν την περίπτωση;
Η Γλωσσομάθεια λανθασμένα, δεν αλλάζει την πραγματική παράμετρο. Θα έπρεπε να της δώσει την τιμή 6.

akalest0s

"Abstraction is not the first stage, but the last stage, in a mathematical development." MK
"I don't want to write about a high level thing, unless I fully understand about a low level thing" DK

alkisg

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

Στην αντιγραφή, δημιουργούνται δύο διαφορετικές τοπικές μεταβλητές, δεν είναι references στην ίδια μεταβλητή.
Άρα μόνο μία θα επιστρέψει, είτε η τιμή 2 είτε η τιμή 3.

Τελευταίο bullet εδώ: https://alkisg.mysch.gr/ΓΛΩΣΣΑ/Μεταβίβαση_παραμέτρων/
(ήταν και δυσκολότερο στην υλοποίηση από ότι το by reference...)

akalest0s

Πράγματι περιμένεις 2 ή 3, αλλά η περίπτωση παραμένει απροσδιόριστη.
"Abstraction is not the first stage, but the last stage, in a mathematical development." MK
"I don't want to write about a high level thing, unless I fully understand about a low level thing" DK

petrosp13

Φαντάζομαι ότι θα αποθηκευτεί τελικά η δεύτερη τιμή σαν τελευταία
Σιγά μην υπάρχει οδηγία για τέτοια λεπτομέρεια...
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

alkisg

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

Στο συγκεκριμένο, προσωπικά σκέφτηκα ως εξής: είναι πιο φυσιολογικό να μπουν οι παράμετροι από τα αριστερά προς τα δεξιά, όπως και στην ιεραρχία των πράξεων κλπ. Για παράδειγμα, αν είχαμε π.χ. ΚΑΛΕΣΕ ΔιαδικασίαΔ(ΣυνάρτησηΑ(α), ΣυνάρτησηΒ(β)), και κάναμε πίνακα τιμών, θα θέλαμε να εκτελεστεί πρώτα η κλήση της συνάρτησης Α και μετά της συνάρτησης Β.

Αν δεχτούμε το "μπαίνουν από αριστερά προς τα δεξιά" ως σωστό, τότε λόγω της στοίβας κλήσης παραμέτρων, που εκτός του ότι ισχύει παντού περιγράφεται και στο βιβλίο, κατά την απώθηση από τη στοίβα θα βγουν αντίθετα, από δεξιά προς τα αριστερά. Σε αυτό το δεύτερο κομμάτι δεν νομίζω ότι υπάρχει δυνατότητα για πολλές ερμηνείες, θα είναι αφύσικο να παραβιαστεί η λειτουργία της στοίβας για να βγουν από αριστερά προς τα δεξιά.

Γι' αυτό και στο Διερμηνευτή η τελική τιμή είναι 2...

akalest0s

Μόλις σε πιέσουμε λίγο, τσουπ, το σκας το παραμύθι!  ;D πλάκα κάνω
Αυτές οι επεξηγήσεις για το πως δουλεύει ο διερμηνευτής behind the scenes, είναι πολύ ενδιαφέρουσες.
"Abstraction is not the first stage, but the last stage, in a mathematical development." MK
"I don't want to write about a high level thing, unless I fully understand about a low level thing" DK

evry

Είχα παρουσιάσει κάποτε μια εργασία/έρευνα σχετικά με το θέμα αυτό.
Με είχε απασχολήσει το θέμα από διδακτικής σκοπιάς. Δηλαδή ποια θα ήταν η σκέψη των μαθητών όταν δουν κάτι τέτοιο.
Σε αυτή την περίπτωση αυτό που έχει σημασία είναι η μεταβλητή που λαμβάνει τελευταία τιμή να μην είναι τελευταία και στη λίστα παραμέτρων, γιατί είχα υποθέσει ότι οι μαθητές θα θεωρήσουν ότι η μεταβίβαση παραμέτρων θα γίνει από αριστερά προς τα δεξιά αφού δεν ξέρουν ότι υλοποιείται με στοίβα. π.χ. σε ένα παράδειγμα όπως το παρακάτω:
Κώδικας: javascript
.....
Α <- 1
ΚΑΛΕΣΕ ΤΕΣΤ(Α, Α, Α)
ΓΡΑΨΕ Α
..........

ΔΙΑΔΙΚΑΣΙΑ ΤΕΣΤ(X, Y, Z)
ΜΕΤΑΒΛΗΤΕΣ
    ΑΚΕΡΑΙΕΣ:
ΑΡΧΗ
     Ζ <- Ζ+ 3
     Υ <- Υ + 2
     Χ <- Χ + 1
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ


Το ερώτημα ήταν ποιος τρόπος μεταβίβασης παραμέτρων είναι πιο κοντά στο common sense των μαθητών: by reference ή κάτι άλλο;

Η εργασία είναι στον παρακάτω σύνδεσμο
http://dide.ilei.sch.gr/keplinet/education/docs/syn_syrou2007_vraxnos.pdf
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

alkisg

Ξαναέψαξα λίγο στη Wikipedia για να δω πώς αναφέρεται αυτός ο μηχανισμός στη βιβλιογραφία:

Παράθεση από: https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_copy-restore
Call by copy-restore—also known as "copy-in copy-out", "call by value result", "call by value return"

Εκεί αναφέρει ότι χρησιμοποιείται σπάνια, το οποίο είναι προφανές αφού χρειάζεται ένα σωρό malloc() και memcpy() οπότε είναι μη αποδοτικός.
Όμως χρειάζεται σε περιπτώσεις όπως multiprocessing και remote procedure call όπου η διαδικασία που καλείται μπορεί να μην έχει καν πρόσβαση στη RAM του καλώντος.

Αναφέρεται μάλιστα και στην συγκεκριμένη περίπτωση που συζητάμε:

Παράθεση από: https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_copy-restore
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?

pgrontas

Πολύ ενδιαφέρουσα συζήτηση.
Ειλικρινά περίμενα ότι ο Διερμηνευτής θα βγάλει 3.
Παράθεση από: alkisg στις 10 Φεβ 2020, 07:17:34 ΜΜ
Σίγουρα σχεδιάζοντας μια θεωρητική γλώσσα σε χαρτί δεν μπορεί κανείς να προβλέψει όλες τις λεπτομέρειες που θα χρειαστεί να αποσαφηνιστούν κατά την υλοποίηση.

Στο συγκεκριμένο, προσωπικά σκέφτηκα ως εξής: είναι πιο φυσιολογικό να μπουν οι παράμετροι από τα αριστερά προς τα δεξιά, όπως και στην ιεραρχία των πράξεων κλπ. Για παράδειγμα, αν είχαμε π.χ. ΚΑΛΕΣΕ ΔιαδικασίαΔ(ΣυνάρτησηΑ(α), ΣυνάρτησηΒ(β)), και κάναμε πίνακα τιμών, θα θέλαμε να εκτελεστεί πρώτα η κλήση της συνάρτησης Α και μετά της συνάρτησης Β.

Αν δεχτούμε το "μπαίνουν από αριστερά προς τα δεξιά" ως σωστό, τότε λόγω της στοίβας κλήσης παραμέτρων, που εκτός του ότι ισχύει παντού περιγράφεται και στο βιβλίο, κατά την απώθηση από τη στοίβα θα βγουν αντίθετα, από δεξιά προς τα αριστερά. Σε αυτό το δεύτερο κομμάτι δεν νομίζω ότι υπάρχει δυνατότητα για πολλές ερμηνείες, θα είναι αφύσικο να παραβιαστεί η λειτουργία της στοίβας για να βγουν από αριστερά προς τα δεξιά.

Γι' αυτό και στο Διερμηνευτή η τελική τιμή είναι 2...
Αυτό που καταλαβαίνω είναι ότι το πρόβλημα δεν υπάρχει μόνο στο μάθημα, αλλά σε όλες τις γλώσσες που χρησιμοποιούν αυτό τον μηχανισμό μεταβίβασης. Γνωρίζει κάποιος αν υπήρχε κάποιος τρόπος να αντιμετωπιστεί αυτό το πρόβλημα εκεί;
(edit: Ενώ πληκτρολογούσα έγραψε και ο Άλκης μήνυμα που εν μέρει απαντά.)

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

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

Τέλος πάντων ήδη έγραψα πολλά, δεν θεωρώ ότι κάποιος θα χρησιμοποιήσει αυτό τον τρόπο για να κάνει κάτι πραγματικά χρήσιμο. Μάλλον πρόκειται περί νοητικής άσκησης.

Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

Καραμαούνας Πολύκαρπος

#10
Με βάση αυτό εδώ: https://opendsa-server.cs.vt.edu/ODSA/Books/PL/html/SLang2ParameterPassing.html
η προσομοίωση του "Call-by-copy-restore (also known as value-result, copy-in-copy-out)" με C δίνει αποτέλεσμα την τιμή 3 διότι το copy-out phase το κάνει από αριστερά προς τα δεξιά

evry

Παναγιώτη μετά αφού το έψαξα περισσότερο βρήκα ότι χρησιμοποιείται και στην Ada. Απλά και η Ada το δανείστηκε από Algol, Fortran. (συγκεκριμένες εκδόσεις έτσι?)
Αυτή νομίζω είναι η κατάλληλη περίπτωση για να μελετήσουμε! (που μας φτάσανε ε? Να διαβάζουμε Ada!!!)
Εκεί όμως χρησιμοποιείται όταν ορίσεις την παράμετρο να είναι in out, δηλαδή και εισόδου και εξόδου.

Στην Ada λοιπόν δοκίμασα το παρακάτω πρόγραμμα:

Κώδικας: ada
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
procedure myprogram is
    X : INTEGER;
    
    procedure test(a, b, c : in out INTEGER) is
    begin
       c := 100;
       a := 10;
       b := 1;
    end test;
    
begin
    X := 2020; 
    test(X, X, X);
    Put(X);
end myprogram;


Μαντέψτε τι μήνυμα μου έβγαλε! ;D ;D ;D
writable actual for "a" overlaps with actual for "b"

Το δοκίμασα στους παρακάτω online compilers
https://www.jdoodle.com/execute-ada-online/
https://www.tutorialspoint.com/compile_ada_online.php

Τουλάχιστον έμαθα και κάποια βασικά για την Ada, που δεν ήξερα  :D
Άρα άμα ξέρεις ΓΛΩΣΣΑ ξέρεις και ..... Ada
Είμαστε πολύ μπροστά τελικά

ΥΓ.
Άσχετο αλλά ψάχνοντας βρήκα το παρακάτω και έπαθα πλάκα! Οι άνθρωποι είναι απίστευτοι! Έχουν φτιάξει ένα εργαλείο που σου παράγει παραδείγματα με visualization διάφορων τρόπων μεταβίβασης παραμέτρων!!
https://opendsa-server.cs.vt.edu/ODSA/Books/PL/html/SLang2ParameterPassing.html
Τελικά δεν βρήκα κάτι χρήσιμο, έκανα το δικό μου, όμως έχουν κάνει καλή δουλειά! Είναι μέρος διαδραστικού βιβλίου (!!!) για γλώσσες προγραμματισμού!
https://opendsa-server.cs.vt.edu/ODSA/Books/PL/html/
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

alkisg

Ευριπίδη το link που παραθέτεις είναι αυτό που παρέθεσε και ο Πολύκαρπος παραπάνω.
Το παράδειγμα που δίνουν για υλοποίηση copy-restore σε C είναι απλό παράδειγμα, δεν νομίζω ότι απαντάει στο ερώτημα.
Είχα κάνει κάτι τεστ το μεσημέρι, αν κατάλαβα καλά, η Ada το 2012 ξεκίνησε να το θεωρεί λάθος όπως λες, ενώ νομίζω ότι παλιότερες εκδόσεις της το έκαναν από αριστερά προς τα δεξιά, και έλεγα να βρω κάποια παλιά Ada να δοκιμάσω να σιγουρευτώ πριν ποστάρω, αλλά δεν ξέρω και κατά πόσο αξίζει τον κόπο. Νομίζω επίσης ότι με το -gnatd.E flag θα ξαναγίνει warning.

https://patchwork.ozlabs.org/patch/283213/
https://stackoverflow.com/questions/20706701/confusion-in-call-by-copy-restore-in-a-special-case

evry

Δεν το πιστεύω! Δεν είδα το μήνυμα του Πολύκαρπου γιατί απαντούσα στον Παναγιώτη, τώρα το βλέπω  :-[
Τι να πω, τέτοια σύμπτωση.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Καρκαμάνης Γεώργιος

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

bugman

#15
Στη c++ όταν κάτι είναι αδιάφορο για τον προγραμματιστή, πχ δεν θα έκανε ποτέ πέρασμα με αναφορά μιας μεταβλητής ταυτόχρονα σε δύο τυπικές παράμετρους σε μια κλήση, προσδορίζετσι στο εγχειρίδιο ως απροσδιόριστη συμπεριφορά ή κατάσταση.
Δηλαδή μην περιμένουμε για κάθε παράλογη χρήση να υπάρχει αιτιολογιμένη απάντηση.

Αν θέλετε κάτι πραγματικά μυστήριο, είναι το αποτέλεσμα του -3^2 και το 0-3^2 καθώς και το 0+-3^2.
Ο διερμηνευτής της ΓΛΩΣΣΑ δίνει -9 -9 -9 το ίδιο και η Visual Basic. Η ΓΛΩΣΣΑ όμως στα χαρτιά τι δίνει;
Η Μ2000 δίνει 9 -9 9 γιατί το - στην πρώτη και τρίτη περίπτωση είναι μοναδιαίος τελεστής. Το ίδιο δίνει το Excel και το LibreOffice Calc.
Εδώ λοιπόν δεν είναι θέμα σωστού, αλλά προκαθορισμένου. Στην περίπτωση του περάσματος με αναφορά (όπως γίνεται) στη ΓΛΩΣΣΑ δεν υπάρχει προκαθορισμένη συμπεριφορά του διερμηνευτή, γιατί απλά δεν υπάρχει διερμηνευτής μαζί με το βιβλίο.



George Eco

Παράθεση από: bugman στις 29 Φεβ 2020, 11:02:20 ΠΜ
Αν θέλετε κάτι πραγματικά μυστήριο, είναι το αποτέλεσμα του -3^2 και το 0-3^2 καθώς και το 0+-3^2.

Το -3^2 το επιστρέφει -9 δίνοντας προτεραιότητα στη δύναμη. Λογικό.
0 + -3^2 επιστρέφει - 9 πάλι. Διότι προτεραιότητα έχει η δύναμη.

Ο Διερμηνευτής ΣΤΑ ΠΛΑΙΣΙΑ ΤΟΥ ΜΑΘΗΜΑΤΟΣ σωστά επιστρέφει αυτές τις τιμές.


"Η Μ2000 δίνει 9 -9 9 γιατί το - στην πρώτη και τρίτη περίπτωση είναι μοναδιαίος τελεστής."
Έχεις ορίσει τη προτεραιότητα αυτή στο manual; Γιατί πολλούς θα τους ξενίσει. Άλλωστε το - στο -9 μπορεί να θεωρηθεί κανονικός τελεστής γινομένου.  (-1)*9 οπότε μαθηματικώς ορθός είναι ο διερμηνευτής για να είμαστε δίκαιοι, έτσι πιστεύω.

Στο θέμα byVal byRef καλό θα ήταν να μη... πειραματιζόμαστε, δε πιστεύω να μπει κάτι τόσο τραβηγμένο Πανελλήνιες με τόσο κακώς διατυπωμένη θεωρητική γλώσσα και να πω την αλήθεια, πιστεύω πως πάει κόντρα στους μαθησιακούς στόχους, αλλά θα μου πεις υπάρχει και το Β2 του 2018 που συνεχώς αναφέρω γιατί με έχει στοιχειώσει.



George Eco

Ο Διερμηνευτής δίνει 2 στο αρχικό παράδειγμα.

ΠΡΟΓΡΑΜΜΑ ΟΛΑ_ΣΠΑΣΤΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Χ
ΑΡΧΗ
  Χ <- 1
  ΚΑΛΕΣΕ Σ(Χ, Χ)
  ΓΡΑΨΕ Χ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ Σ(α, β)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: α, β
ΑΡΧΗ
  α <- 2*α
  β <- 3*β
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Πιστεύω όμως πως οι μαθητές, λόγω άγνοιας του behind the scenes τρόπου λειτουργίας του διερμηνευτή, θα μπερδεύονταν εδώ. Θα περίμεναν 3 πιστεύω.
Γενικά όμως, επειδή στα πλαίσια του μαθήματος δεν έχω δει διαδικασία που το κάνει αυτό στο βιβλίο μέσα, ευελπιστώ να μη δω κάτι κουφό στις Πανελλήνιες με την ίδια λογική.
Θέλω να πω, στα πλαίσια του μαθήματος, οι παράμετροι παίρνουν διαφορετικά ορίσματα κάθε μία.
Κι είναι σαφώς όπως είπε ο κος Καρκαμάνης ασάφεια. Θέλει ορθή διατύπωση. Αναρωτιέμαι πως το κάνει η python αυτό. Α περίμενε, δεν έχει πρόβλημα η python με τέτοια. Βάζω και βλέπω πως το κάνει έτσι κι αλλιώς. Ακόμα και pascal να είχα, έβαζα κι έβλεπα το πως.
Η ΓΛΩΣΣΑ που είναι θεωρητική;;; Αυτό αξίζει ένα copy - paste σε ένα άλλο thread...  >:D

alkisg

Παράθεση από: George Eco στις 29 Φεβ 2020, 04:15:56 ΜΜ
Α περίμενε, δεν έχει πρόβλημα η python με τέτοια. Βάζω και βλέπω πως το κάνει έτσι κι αλλιώς. Ακόμα και pascal να είχα, έβαζα κι έβλεπα το πως.

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

Εκ των υστέρων και για μερικές μόνο από τις ασάφειες έρχονται πρότυπα που απαντούν.
Για παράδειγμα, σε αυτό ακριβώς που συζητάμε εδώ, για το πέρασμα της ίδιας παραμέτρου δύο φορές, η Ada απάντησε "δεν επιτρέπεται" μόλις το 2012.
Αντίστοιχα με μια διευκρίνηση του Υπουργείου.

Δηλαδή η χρήση python ή οποιασδήποτε άλλης γλώσσας δεν μας απαλλάσσει από ασάφειες.
Είναι δουλειά των θεματοδοτών το να μην μπουν τέτοια θέματα σε εξετάσεις, τουλάχιστον μέχρι να διευκρινιστούν από το Υπουργείο.
Και δουλειά των καθηγητών να ερμηνεύουν το βιβλίο σαν βιβλίο και όχι σαν βίβλο. Το "η τάδε ανθυποπερίπτωση δεν αναφέρεται ρητά στο βιβλίο" μπορεί απλά να σημαίνει ότι εξυπακούεται, όχι ότι απαγορεύεται.

Για να μην παρεξηγηθώ, κι εγώ προτιμώ τη διδασκαλία της Python, αλλά και ασάφειες έχει και περιορισμό ύλης θα χρειαστεί κλπ, δεν είναι πανάκεια.

bugman

@GeorgeEco
Ο evaluator που έχω φτιάξει στο 0 + -3^2   (τα διαστήματα δεν χρειάζονται), κάνει το εξής πρώτα  κρατάει το 0,  μετά στον τελεστή + ρίχνει με αναδρομή το -3^2 το οποίο βρίσκει το - ως μοναδιαίο τελεστή και τον βάζει στο 3 ως -3, και μετά εκτελεί την δύναμη.

Στο 0-3^2 το - είναι κανονικός τελεστής οπότε στην αναδρομική κλήση πάει το 3^2 και επιστρέφει το 9 το οποίο αφαιρείται από το 0, άρα δίνει -9.
Αυτό κάνει και το Excel, το οποίο χρησιμοποιείται κατά κόρον για οικονομικά και επιστημονικά μοντέλα.

ApoAntonis

Και το 0^0 θα περίμενε κάποιος μαθητής να δώσει κάτι άλλο από αυτό που δίνει ο διερμηνευτής.
Σημαίνει ότι ο διερμηνευτής δεν έπρεπε να έχει αυτήν την σύμβαση ή ότι αναγκαστικά είναι παράλειψη της ΓΛΩΣΣΑΣ;

Και το 1/3*3 δεν παράγει το "αναμενόμενο" αποτέλεσμα. Είναι και αυτό παράλειψη της ΓΛΩΣΣΑΣ;

Και ο βρόχος
x <- 1
ΟΣΟ x > 0 ΕΠΑΝΑΛΑΒΕ
  x <- x/2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


είναι ατέρμων, αλλά δεν είναι στην πραγματικότητα. Η μήπως στην python θα κάνουμε εύρος αναπαράστασης;

Μπορούμε να συνεχίσουμε "για πάντα" με τέτοιες περιπτώσεις,
θα έχουμε χάσει όμως το νόημα.

@alkis
compiler με συγκεκριμένα options
(από εξαπανέκαθεν ήθελα να γράψω για options)


George Eco

#21
Παράθεση από: ApoAntonis στις 29 Φεβ 2020, 11:14:48 ΜΜ
Και το 0^0 θα περίμενε κάποιος μαθητής να δώσει κάτι άλλο από αυτό που δίνει ο διερμηνευτής.
Σημαίνει ότι ο διερμηνευτής δεν έπρεπε να έχει αυτήν την σύμβαση ή ότι αναγκαστικά είναι παράλειψη της ΓΛΩΣΣΑΣ;

Όπα. Πρώτον μπράβο που θίγεις αυτό το θέμα συνάδελφε. Αυτό είναι σα να λέμε α/Χ με Χ = 0 δεν είναι δουλειά του διερμηνευτή.
Και δυστυχώς αν βάλεις στο Google = 0 ^ 0 θα επιστρέψει 1 γιατί κάνει την εικασία πως αναφέρεσαι αυστηρά στο R κι αυτό είναι όλο.
Βέβαια γνωρίζουν τα παιδιά από τα Μαθηματικά που έχουν διδαχτεί πως 0^0 είναι αοριστία οπότε εγώ το συγκαταλέγω στον αμυντικό προγραμματισμό τους, στα πλαίσια ελέγχου εγκυρότητας κι εκσφαλμάτωσης, ώστε να μη μπορεί να γίνει κάτι τέτοιο βάσει του κώδικα. Διότι αν βάλουν τα παιδιά 0^0 στην ουσία παραβιάζουν μία τουλάχιστο βασική αρχή των Αλγορίθμων κι αυτές οι Αρχές είναι εντός της ύλης τους.
Πολύ μου άρεσε αυτό.


Παράθεση από: ApoAntonis στις 29 Φεβ 2020, 11:14:48 ΜΜ
Και το 1/3*3 δεν παράγει το "αναμενόμενο" αποτέλεσμα. Είναι και αυτό παράλειψη της ΓΛΩΣΣΑΣ;

Δε κατάλαβα. Δηλαδή τι θα έπρεπε να επιστρέφει; Αυτό που πρέπει να επιστρέφει είναι 1 κι αυτό ακριβώς επιστρέφει.

x <- 1
ΟΣΟ x > 0 ΕΠΑΝΑΛΑΒΕ
  x <- x/2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


είναι ατέρμων, αλλά δεν είναι στην πραγματικότητα. Η μήπως στην python θα κάνουμε εύρος αναπαράστασης;

Μπορούμε να συνεχίσουμε "για πάντα" με τέτοιες περιπτώσεις,
θα έχουμε χάσει όμως το νόημα.

@alkis
compiler με συγκεκριμένα options
(από εξαπανέκαθεν ήθελα να γράψω για options)
[/quote]

Αυτό θυμάμαι το συζητούσα με τον bugman, και τον Άλκη. Έχει να κάνει πρώτα με τους περιορισμούς στο hardware, και συνάμα με τους περιορισμούς κάθε compiler.
Το ερώτημα εδώ είναι πότε ένας δεκαδικός μηδενίζεται. Σε ποιο ψηφίο στο hardware. Ο δειρμηνευτής έκανε 30 επαναλήψεις. Η ΓΛΩΣΣΑ μάλλον θα το έκανε για πάντα. Είναι θεωρητική.


Παράθεση από: alkisg στις 29 Φεβ 2020, 05:26:03 ΜΜ
Δηλαδή η χρήση python ή οποιασδήποτε άλλης γλώσσας δεν μας απαλλάσσει από ασάφειες.
Είναι δουλειά των θεματοδοτών το να μην μπουν τέτοια θέματα σε εξετάσεις, τουλάχιστον μέχρι να διευκρινιστούν από το Υπουργείο.
Και δουλειά των καθηγητών να ερμηνεύουν το βιβλίο σαν βιβλίο και όχι σαν βίβλο. Το "η τάδε ανθυποπερίπτωση δεν αναφέρεται ρητά στο βιβλίο" μπορεί απλά να σημαίνει ότι εξυπακούεται, όχι ότι απαγορεύεται.
Για να μην παρεξηγηθώ, κι εγώ προτιμώ τη διδασκαλία της Python, αλλά και ασάφειες έχει και περιορισμό ύλης θα χρειαστεί κλπ, δεν είναι πανάκεια.
Άλκη ναι συμφωνω! Νομίζω το αναφέρω και στο αντίστοιχο thread. Πρέπει να πλαισιωθεί ορθά η python για να δουλέψει σωστά κι αν μη τι άλλο, υπάρχει ένα manual κι ένα IDLE που θα συμπεριφερθεί ανάλογα. Μιλάμε για ίδιο Version. Και μάλιστα το μάθημα μπορεί να επικαιροποιείτε με απλές ενημερώσεις των αναγκαίων (αν υπάρξουν) από ένα change log. Όχι με νέους τόμους.
Και να πω εδώ πως αναφερόμουν στη ΓΛΩΣΣΑ κι όχι στο Διερμηνευτή.