Οι χαρακτήρες στη Factor είναι ακέραιοι, δηλαδή σημεία κώδικα Unicode, οπότε οι αριθμητικοί τελεστές <, >, = σου δίνουν απευθείας διάταξη με διάκριση πεζών-κεφαλαίων. Το λεξιλόγιο unicode προσθέτει κατηγορήματα με επίγνωση του Unicode και μετατροπή πεζών και κεφαλαίων ενός μεμονωμένου χαρακτήρα.
LETTER? ( c -- ? ) ! uppercase letter
letter? ( c -- ? ) ! lowercase letter
Letter? ( c -- ? ) ! letter, either case
digit? ( c -- ? ) ! decimal digit
digit> ( c -- n ) ! the integer value of a digit char
blank? ( c -- ? ) ! whitespace
USING: unicode ;
CHAR: A LETTER? . ! => t
CHAR: a letter? . ! => t
CHAR: 7 digit? . ! => t
CHAR: 7 digit> . ! => 7
Τα ch>upper και ch>lower μετατρέπουν τα πεζά/κεφαλαία ενός μεμονωμένου χαρακτήρα. Τα >upper και >lower σε επίπεδο συμβολοσειράς τα εφαρμόζουν σε κάθε χαρακτήρα μιας συμβολοσειράς.
CHAR: a ch>upper . ! => 65 (which is CHAR: A)
"Hello" >upper . ! => "HELLO"
Το capitalize μετατρέπει ολόκληρη τη συμβολοσειρά σε πεζά και στη συνέχεια κάνει κεφαλαίο τον πρώτο της χαρακτήρα, δηλαδή τη μορφή τίτλου μιας μόνο λέξης:
"hELLO" capitalize . ! => "Hello"
Το CHAR: A αναλύεται στο ακέραιο σημείο κώδικα του A. Για ονομασμένους χαρακτήρες, χρησιμοποίησε τα ονόματα space, tab, \n, κ.λπ.:
CHAR: A . ! => 65
CHAR: space . ! => 32
CHAR: \n . ! => 10
Όταν μια λέξη χρειάζεται να επιστρέψει μια ετικέτα αντί για μια τιμή (για παράδειγμα, yes/no/maybe αντί για ένα Boolean), δήλωσε κάθε ετικέτα ως σύμβολο. Ένα σύμβολο είναι μια λέξη που ωθεί τον εαυτό της στη στοίβα όταν καλείται, και δύο σύμβολα συγκρίνονται ως ίσα μόνο όταν έχουν το ίδιο όνομα.
USING: kernel ;
SYMBOLS: yes no maybe ;
yes . ! => yes
yes yes = . ! => t
yes no = . ! => f
Το SYMBOL: name δηλώνει ένα σύμβολο· το SYMBOLS: a b c ; δηλώνει πολλά.
Η Heidi, μια νεαρή εξωγήινη από τη Forth, χρειάζεται να ολοκληρώσει λίγη δουλειά για το πρόγραμμά της με τα ανθρώπινα αλφάβητα και σου ζητάει να τη βοηθήσεις να προγραμματίσει μερικές λέξεις που θα της χρειαστούν.
Όρισε τη compare-chars ώστε να δέχεται δύο χαρακτήρες και να επιστρέφει το σύμβολο less, greater ή equal, ανάλογα με το αν ο πρώτος είναι μικρότερος, μεγαλύτερος ή ίσος με τον δεύτερο. Σύγκρινε με διάκριση πεζών-κεφαλαίων.
CHAR: A CHAR: B compare-chars . ! => less
CHAR: B CHAR: A compare-chars . ! => greater
CHAR: A CHAR: A compare-chars . ! => equal
CHAR: A CHAR: a compare-chars . ! => less
Η Heidi χρειάζεται να ξέρει αν ένας χαρακτήρας είναι "big" (κεφαλαίος), "small" (πεζός) ή δεν έχει μέγεθος. Όρισε τη size-of-char ώστε να επιστρέφει big, small ή no-size.
CHAR: A size-of-char . ! => big
CHAR: a size-of-char . ! => small
CHAR: 5 size-of-char . ! => no-size
CHAR: space size-of-char . ! => no-size
Η Heidi μερικές φορές χρειάζεται να αλλάξει το μέγεθος ενός χαρακτήρα σε ένα άλλο. Όρισε τη change-size-of-char ώστε να δέχεται έναν χαρακτήρα και ένα επιθυμητό μέγεθος (big ή small) και να επιστρέφει τον χαρακτήρα στην αντίστοιχη πεζή ή κεφαλαία μορφή.
CHAR: a big change-size-of-char . ! => 65 (CHAR: A)
CHAR: A small change-size-of-char . ! => 97 (CHAR: a)
Η Heidi χρειάζεται επίσης να ξέρει τι είδος χαρακτήρα είναι. Όρισε τη type-of-char ώστε να επιστρέφει:
alpha για οποιοδήποτε γράμμα (κεφαλαίο ή πεζό)numeric για ένα δεκαδικό ψηφίοspace για τον χαρακτήρα διαστήματοςnewline για τον χαρακτήρα αλλαγής γραμμήςunknown διαφορετικάCHAR: A type-of-char . ! => alpha
CHAR: 5 type-of-char . ! => numeric
CHAR: space type-of-char . ! => space
CHAR: \n type-of-char . ! => newline
CHAR: ! type-of-char . ! => unknown
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Factor με 47 έννοιες163 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.