A Factorban a karakterek egészek, Unicode-kódpontok, így a numerikus
<, >, = közvetlenül kis- és nagybetű-érzékeny rendezést ad. A
unicode szókészlet Unicode-tudatos predikátumokat és
egyetlen karakterre vonatkozó kis- és nagybetű-átalakítást tesz hozzá.
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
A ch>upper és a ch>lower egyetlen karakter betűállapotát váltja át.
A karakterlánc-szintű >upper és >lower pedig a karakterlánc minden
karakterére alkalmazza őket.
CHAR: a ch>upper . ! => 65 (which is CHAR: A)
"Hello" >upper . ! => "HELLO"
A capitalize egy teljes karakterláncot csupa kisbetűssé alakít, majd
az első karakterét nagybetűssé teszi: ez egyetlen szó címformátuma.
"hELLO" capitalize . ! => "Hello"
A CHAR: A beolvasásakor az A egész kódpontját kapod. Nevesített
karakterekhez használd a space, tab, \n stb. neveket:
CHAR: A . ! => 65
CHAR: space . ! => 32
CHAR: \n . ! => 10
Amikor egy szónak nem értéket, hanem címkét kell visszaadnia, mondjuk
yes/no/maybe értéket boolean helyett, deklaráld minden címkét
szimbólumként. A szimbólum olyan szó, amely meghívva önmagát teszi a
veremre, és két szimbólum csak akkor egyenlő, ha ugyanaz a nevük.
USING: kernel ;
SYMBOLS: yes no maybe ;
yes . ! => yes
yes yes = . ! => t
yes no = . ! => f
A SYMBOL: name egyetlen szimbólumot deklarál, a SYMBOLS: a b c ;
pedig többet.
Heidi, egy fiatal Forth-űrlény, éppen az emberi ábécékről szóló projektjén dolgozik, és megkérdezi, hogy segítenél-e neki megprogramozni néhány szót, amire szüksége lesz.
Definiáld a compare-chars szót úgy, hogy átvegyen két karaktert, és attól függően adja vissza a less, greater vagy equal szimbólumot, hogy az első kisebb, nagyobb vagy egyenlő-e a másodikkal. Az összehasonlítás legyen kis- és nagybetűérzékeny.
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 szeretné tudni, hogy egy karakter „big” (nagybetű), „small” (kisbetű), vagy nincs mérete. Definiáld a size-of-char szót úgy, hogy a big, small vagy no-size értéket adja vissza.
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 néha szeretne egy karaktert másik méretre váltani. Definiáld a change-size-of-char szót úgy, hogy átvegyen egy karaktert és egy kívánt méretet (big vagy small), és a megfelelő kis- vagy nagybetűs karaktert adja vissza.
CHAR: a big change-size-of-char . ! => 65 (CHAR: A)
CHAR: A small change-size-of-char . ! => 97 (CHAR: a)
Heidi azt is szeretné tudni, hogy a karakter milyen fajtájú. Definiáld a type-of-char szót úgy, hogy a következőket adja vissza:
alpha bármely betűre (nagy- vagy kisbetűre)numeric egy decimális számjegyrespace a szóköz karakterrenewline az újsor karakterreunknown minden más esetbenCHAR: 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
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Factor nyelvet 47 fogalom163 feladat segítségével, valódi emberi mentorálással, mindez ingyen.