Διαδρομές
/
Common Lisp
Common Lisp
/
Ασκήσεις
/
Μελέτη χαρακτήρων
Μελέτη χαρακτήρων

Μελέτη χαρακτήρων

Άσκηση εκμάθησης

Εισαγωγή

Χαρακτήρες

Η Common Lisp διαθέτει χαρακτήρες, όπως και οι άλλες γλώσσες προγραμματισμού. Οι χαρακτήρες είναι αντικείμενα που αναπαριστούν ένα στοιχείο ενός κειμένου (για παράδειγμα, μιας συμβολοσειράς ή μιας ροής κειμένου).

Οι χαρακτήρες μπορούν να μετατραπούν σε ακέραιους και αντίστροφα. (Αλλά δεν είναι ακέραιοι: είναι ένας ξεχωριστός τύπος.)

Οι χαρακτήρες αναπαρίστανται ως #\ ακολουθούμενοι από το όνομά τους. Το "όνομα" για κοινούς χαρακτήρες, όπως το "A" ή το "b" ή το "9" ή το "!", είναι απλώς αυτό: δηλαδή #\A, #\b, #\9 και #\!. Κάποιοι μη γραφικοί χαρακτήρες, όπως το κενό ή η αλλαγή γραμμής, έχουν ονόματα όπως #\Space και #\Newline.

Το πρότυπο απαιτεί από μια υλοποίηση να έχει μόνο 96 χαρακτήρες (κεφαλαία και πεζά λατινικά αλφαβητικά γράμματα (A-Za-z), τα ψηφία (0-9), κενό (#\Space), αλλαγή γραμμής (#\Newline) και σημεία στίξης (π.χ. !$"'(),_-./:;?+<=>#%&*@[\]{|}`^~) Ωστόσο, οι περισσότερες υλοποιήσεις προσφέρουν περισσότερα από αυτά, συμπεριλαμβανομένων υλοποιήσεων που παρέχουν όλους τους χαρακτήρες Unicode.

Σύγκριση χαρακτήρων

Οι χαρακτήρες μπορούν να συγκριθούν ως προς την ισότητα με τις char= ή char-equal (η τελευταία δεν κάνει διάκριση πεζών-κεφαλαίων).

Οι χαρακτήρες μπορούν να διαταχθούν με συναρτήσεις όπως οι char<, char>, char<=, char>= και οι εκδόσεις τους χωρίς διάκριση πεζών-κεφαλαίων, char-lessp και char-greaterp.

Τύποι χαρακτήρων

Οι χαρακτήρες μπορούν να κατηγοριοποιηθούν σε διαφορετικούς τύπους: γραφικούς, αλφαβητικούς, αλφαριθμητικούς, ψηφία, κεφαλαία ή πεζά. Ένας χαρακτήρας μπορεί να ανήκει σε περισσότερους από έναν τύπους, όπως ένα κεφαλαίο αλφαβητικό γράμμα. Υπάρχουν κατηγορήματα για καθέναν από αυτούς τους τύπους: graphic-char-p, alpha-char-p, alphanumericp, digit-char-p, upper-case-p και lower-case-p.

Μετατροπή πεζών-κεφαλαίων

Κάποιοι χαρακτήρες μπορούν να είναι κεφαλαίοι ή πεζοί και να μετατραπούν από τη μια μορφή στην άλλη με τις char-upcase και char-downcase.

Οδηγίες

Ο Lewis, ένας νεαρός Lisp Alien, χρειάζεται να κάνει λίγη δουλειά στο έργο του με τα ανθρώπινα αλφάβητα και σε ρωτάει αν μπορείς να τον βοηθήσεις να προγραμματίσεις μερικές συναρτήσεις που θα χρειαστεί.

1. Σύγκριση χαρακτήρων

Ο Lewis θα χρειαστεί μια συνάρτηση για να συγκρίνει δύο χαρακτήρες, προσδιορίζοντας αν ο πρώτος είναι μεγαλύτερος, μικρότερος ή ίσος με τον δεύτερο. Γράψε μια συνάρτηση compare-chars που θα παίρνει δύο χαρακτήρες και θα αξιολογείται σε :greater-than, :less-than ή :equal-to κατάλληλα. Η συνάρτηση θα πρέπει να συγκρίνει με διάκριση πεζών-κεφαλαίων.

2. Προσδιορισμός του "μεγέθους" του χαρακτήρα

Ο Lewis χρειάζεται να ξέρει αν ένας χαρακτήρας είναι "μεγάλος" (κεφαλαίος χαρακτήρας) ή "μικρός" (πεζός χαρακτήρας), ή "χωρίς μέγεθος" αν δεν είναι κανένα από τα δύο. Γράψε μια συνάρτηση size-of-char που θα αξιολογείται σε :big, :small ή :no-size ανάλογα με το "μέγεθος" του χαρακτήρα:

3. Αλλαγή του "μεγέθους" του χαρακτήρα

Ο Lewis μπορεί να χρειαστεί να κάνει έναν μεγάλο χαρακτήρα μικρό ή έναν μικρό χαρακτήρα μεγάλο. Γράψε μια συνάρτηση change-size-of-char που παίρνει δύο παραμέτρους: έναν χαρακτήρα και ένα επιθυμητό μέγεθος (:big ή :small). Θα πρέπει να αξιολογείται στον αντίστοιχο χαρακτήρα του σωστού μεγέθους.

4. Προσδιορισμός του "τύπου" ενός χαρακτήρα

Ο Lewis δεν θα χρειαστεί μόνο να ξέρει ποιο είναι το "μέγεθος" του χαρακτήρα αλλά και ο "τύπος" του. Γράψε μια συνάρτηση type-of-char που θα αξιολογείται σε :alpha αν ο χαρακτήρας είναι αλφαβητικός, :numeric αν είναι αριθμητικός, :space αν είναι χαρακτήρας κενού, :newline αν είναι χαρακτήρας νέας γραμμής και :unknown σε κάθε άλλη περίπτωση.

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Common Lisp Exercism

Έτοιμος να ξεκινήσεις την άσκηση Μελέτη χαρακτήρων;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Common Lisp με 27 έννοιες92 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.