Αν κάνουμε μερική αποτίμηση αλλάζοντας τη σειρά στη σύνθετη συνθήκη τότε θα προκύψει λάθος ή όχι;
Yeap, θα προκύψει λάθος.
Αν όντως είναι έτσι, αυτό είναι ένα επιχείρημα κατά της μερικής αποτίμησης αφού παραβιάζεται η αντιμεταθετικότητα του λογικού τελεστή «και».
Σύμφωνοι, αλλά αυτό επιλέγεται συνειδητά για την απλοποίηση της σύνταξης. Π.χ. έστω ο παρακάτω κώδικας, στον οποίο κάθε συνάρτηση πρέπει να κληθεί ΜΟΝΟ αν κλήθηκαν και όλες οι προηγούμενες:
έγινεΚάτιΜεΤοΧ <- ΨΕΥΔΗΣ
ΑΝ Συνάρτηση1(χ) ΤΟΤΕ
ΑΝ Συνάρτηση2(χ) ΤΟΤΕ
ΑΝ Συνάρτηση3(χ) ΤΟΤΕ
ΑΝ Συνάρτηση4(χ) ΤΟΤΕ
ΑΝ Συνάρτηση5(χ) ΤΟΤΕ
ΔιαδικασίαΠουΚάνειΚάτιΜεΤοΧ(χ)
έγινεΚάτιΜεΤοΧ <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΑΝ όχι ΈγινεΚάτιΜεΤοΧ ΤΟΤΕ
ΓΡΑΨΕ 'Δεν μπορεί να γίνει κάτι με το χ'
ΤΕΛΟΣ_ΑΝ
Ο αντίστοιχός του με μερική αποτίμηση είναι:
ΑΝ Συνάρτηση1(χ) ΚΑΙ Συνάρτηση2(χ) ΚΑΙ Συνάρτηση3(χ) ΚΑΙ Συνάρτηση4(χ) ΚΑΙ Συνάρτηση5(χ) ΤΟΤΕ
ΔιαδικασίαΠουΚάνειΚάτιΜεΤοΧ(χ)
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Δεν μπορεί να γίνει κάτι με το χ'
ΤΕΛΟΣ_ΑΝ
Δηλαδή η μερική αποτίμηση δε χρησιμοποιείται μόνο για λόγους ταχύτητας, αλλά και για πιο ευανάγνωστο κώδικα.
Αλλά αν το οτιδήποτε είναι πχ η αλφαριθμητική τιμή «ΑΒΓ» τότε το 0 * «ΑΒΓ» δεν έχει νόημα γιατί δεν ορίζεται ο πολλαπλασιασμός αριθμού με χαρακτήρες.
Αυτό είναι θέμα συντακτικού ελέγχου, που πραγματοποιείται πριν την εκτέλεση του προγράμματος. Αντίθετα, οι μη αρχικοποιημένες μεταβλητές είναι σφάλμα χρόνου εκτέλεσης.
Εδώ το α[ν+1] είναι κάτι που δεν υπάρχει. Άρα η συνθήκη key<>α[ν+1] δεν ορίζεται.
Όλα αυτά είναι μέρος του ορισμού της μερικής αποτίμησης. Οι λογικοί τελεστές αλλάζουν έννοια και κατά περίπτωση μπορεί να πάρουν την σημασιολογία μιας δεύτερης ΑΝ: ΑΝ (ι <= Ν) ΤΟΤΕ ΑΝ (Α[ι] > 0) ...
Εφόσον ο προγραμματιστής κατανοεί ότι το ΚΑΙ που γράφει ισοδυναμεί με "ΤΟΤΕ ΑΝ" δεν υπάρχει πρόβλημα καθοριστικότητας.
Εκεί αν πεις (Ψευδής και α[1]) με το α[1] δηλωμένο λογικό το πράγμα αλλάζει.
Γιώργο σ' αυτό δε βλέπω καμία απολύτως διαφορά με τους ακεραίους. Αν θεωρείς ότι το α[1] είναι ή ΑΛΗΘΗΣ ή ΨΕΥΔΗΣ, τότε και το α[1] με α=ακέραιος θα πρέπει να είναι ..., -2, -1, 0, 1, 2, ... δηλαδή στο πεδίο ορισμού του. Δεν έχει σημασία που το πεδίο ορισμού των λογικών μεταβλητών είναι πιο μικρό από αυτό των ακεραίων. Αντίστοιχα, αν θεωρείς ότι ένας μη αρχικοποιημένος ακέραιος ...δεν είναι ακέραιος, το ίδιο θα πρέπει να ισχύει και για τις λογικές μεταβλητές.
Εν τέλει, στη δίκη της μερικής αποτίμησης ψηφίζω κι εγώ κατά, για παιδαγωγικούς λόγους. Απλά έλεγα μήπως είχε δει κάποιος κάτι στο βιβλίο.
