Kurzusok
/
Factor
Factor
/
Feladatok
/
Karaktervizsgálat
Karaktervizsgálat

Karaktervizsgálat

Tanulófeladat

Bevezetés

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á.

Karakterpredikátumok

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

Kis- és nagybetű-átalakítás

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"

Karakterliterálok

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

Szimbólumok

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.

Utasítások

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.

1. Két karakter összehasonlítása

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

2. Egy karakter méretének meghatározása

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

3. Egy karakter méretének megváltoztatása

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)

4. Egy karakter típusának meghatározása

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ámjegyre
  • space a szóköz karakterre
  • newline az újsor karakterre
  • unknown minden más esetben
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
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Factor Exercism

Készen állsz elkezdeni a(z) Karaktervizsgálat feladatot?

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.