> ###### Αναδρομικές διαδικασίες με έξοδο

> Η διαδικασία αντεκτύπωση είναι εντολή και όχι μεταβιβαστής.

> `για αντεκτύπωση :λέξη
> αν :λέξη = " [τύπωσε " στοπ]
> παρεμβολή τελευταίο :λέξη
> αντεκτύπωση ΕκτόςΤελευταίου :λέξη
> τέλος`

> Ίσως είναι περισσότερο χρήσιμο να ορίσετε μια νέα διαδικασία αναστροφή, η οποία είναι παρόμοια με τη διαδικασία αντεκτύπωση, με τη μόνη διαφορά ότι επιστρέφει ως έξοδο το αποτέλεσμά της αντί να το τυπώνει σε πλαίσιο κειμένου. Σε μια πρώτη προσπάθεια, μπορούμε απλώς να αλλάξουμε τις παρεμβολή (και τύπωσε) σε έξοδος:

> `για αναστροφή :λέξη
> αν :λέξη = " [έξοδος "]
> έξοδος τελευταίο :λέξη
> αναστροφή ΕκτόςΤελευταίου :λέξη
> τέλος`

> Δοκιμάστε το εξής:

> `δείξε αναστροφή "όλα`
> `α`

> Tο πρόβλημα είναι ότι η έξοδος κάνει τη διαδικασία να σταματήσει και να εξαγάγει το αποτέλεσμα στην εντολή ή το μεταβιβαστή που τη χρησιμοποιεί ως είσοδο. Όταν η Logo διαβάζει τη γραμμή έξοδος τελευταίο :λέξη, αμέσως σταματά και αναφέρει το α στο δείξε.

> Τα στοιχεία της διαδικασίας που χρειαζόμαστε υπάρχουν στην αναστροφή: πρέπει απλά να αναδιαταχθούν. Πρέπει να εκλάβουμε το αναμενόμενο αποτέλεσμα ως συνένωση της εξόδου του τελευταίο :λέξη (σε αυτή την περίπτωση, α) με το τελικό αποτέλεσμα της αναστροφή του ΕκτόςΤελευταίου :λέξη (λό). Αυτό οδηγεί σε έναν συνδυασμό των δύο τελευταίων γραμμών της διαδικασίας αναστροφή, έτσι ώστε το αποτέλεσμα να είναι μια λέξη:

> `για αναστροφή :λέξη
> αν :λέξη = " [έξοδος "]
> έξοδος λέξη τελευταίο :λέξη αναστροφή ΕκτόςΤελευταίου :λέξη
> τέλος`

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

> `αναστροφή "όλα`

> `αναστροφή "όλα στην είσοδο υπάρχει το όλα` `αν "όλα = " [έξοδος"] έξοδος λέξη τελευταίο "όλα` `αναστροφή ΕκτόςΤελευταίου "όλα` |  |  |
> |  | `αναστροφή "όλ στην είσοδο υπάρχει το όλ αν "όλ = " [έξοδος "] έξοδος λέξη τελευταίο "όλ` `αναστροφή ΕκτόςΤελευταίου "όλ` |  |
> ααααα |  | `αναστροφή "ό στην είσοδο υπάρχει το ό αν "ό = " [έξοδος "] έξοδος λέξη τελευταίο "ό` `αναστροφή ΕκτόςΤελευταίου "ό` |
> ααα | ααα |  | `αναστροφή " στην είσοδο υπάρχει το " αν " = " [έξοδος "]` `ΣΩΣΤΟ` `η αναστροφή " εξάγει "`
> ααα | ααα | `η αναστροφή "ό εξάγει ό` |
> ααα | `η αναστροφή "όλ εξάγει λό` |  |
> `η αναστροφή "όλα εξάγει αλό` |  |  |

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

> Μόλις η αναστροφή " εξάγει μια κενή λέξη, η αναστροφή "ό συνδυάζει το ό (την τελευταία είσοδό της) με την κενή λέξη, έτσι ώστε να μπορεί να εξαγάγει το αποτέλεσμα στην αναστροφή "όλ. Η αναστροφή "όλ συνδυάζει το λ (τελευταίο του "όλ) με την είσοδό του ό έτσι ώστε να εξαγάγει το λό στην αναστροφή "όλα. Η αναστροφή "όλα συνδυάζει το α με την είσοδό του λό για να δώσει τελικά το αλό.