Parcours
/
Factor
Factor
/
Exercices
/
Étude de caractères
Étude de caractères

Étude de caractères

Exercice d'apprentissage

Introduction

En Factor, les caractères sont des entiers, à savoir des points de code Unicode, donc les comparaisons numériques <, >, = donnent directement un ordre sensible à la casse. Le vocabulaire unicode apporte des prédicats qui tiennent compte d'Unicode et la conversion de casse d'un seul caractère.

Prédicats sur les caractères

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

Conversion de casse

ch>upper et ch>lower changent la casse d'un seul caractère. Au niveau d'une string, >upper et >lower les appliquent à tous ses caractères.

CHAR: a ch>upper .   ! => 65   (which is CHAR: A)
"Hello" >upper .     ! => "HELLO"

capitalize met toute une string en minuscules, puis passe son premier caractère en majuscule, ce qui donne la casse de titre d'un seul mot :

"hELLO" capitalize .   ! => "Hello"

Littéraux de caractères

CHAR: A s'analyse en le point de code entier de A. Pour les caractères nommés, utilise les noms space, tab, \n, etc. :

CHAR: A .        ! => 65
CHAR: space .    ! => 32
CHAR: \n .       ! => 10

Symboles

Quand un mot doit renvoyer une étiquette plutôt qu'une valeur, par exemple yes/no/maybe au lieu d'un booléen, déclare chaque étiquette comme un symbole. Un symbole est un mot qui se pousse lui-même lorsqu'on l'appelle, et deux symboles ne se comparent égaux que lorsqu'ils portent le même nom.

USING: kernel ;

SYMBOLS: yes no maybe ;

yes .    ! => yes
yes yes = .    ! => t
yes no = .     ! => f

SYMBOL: name en déclare un ; SYMBOLS: a b c ; en déclare plusieurs.

Instructions

Heidi, une jeune extraterrestre Forth, a du travail à abattre sur son projet d'alphabets humains et te demande de l'aider à programmer quelques mots dont elle aura besoin.

1. Compare deux caractères

Définis compare-chars pour qu'elle prenne deux caractères et renvoie le symbole less, greater ou equal selon que le premier est inférieur, supérieur ou égal au second. La comparaison doit être sensible à la casse.

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. Détermine la taille d'un caractère

Heidi a besoin de savoir si un caractère est « big » (majuscule), « small » (minuscule), ou n'a pas de taille. Définis size-of-char pour qu'elle renvoie big, small ou 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

3. Change la taille d'un caractère

Heidi a parfois besoin de faire basculer un caractère vers une autre taille. Définis change-size-of-char pour qu'elle prenne un caractère et une taille souhaitée (big ou small) et renvoie le caractère dans la casse correspondante.

CHAR: a big change-size-of-char .     ! => 65   (CHAR: A)
CHAR: A small change-size-of-char .   ! => 97   (CHAR: a)

4. Détermine le type d'un caractère

Heidi a aussi besoin de savoir de quel type de caractère il s'agit. Définis type-of-char pour qu'elle renvoie :

  • alpha pour toute lettre (majuscule ou minuscule)
  • numeric pour un chiffre décimal
  • space pour le caractère espace
  • newline pour le caractère de nouvelle ligne
  • unknown sinon
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
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Factor Exercism

Prêt à commencer Étude de caractères ?

Inscris-toi sur Exercism pour apprendre et maîtriser Factor avec 47 concepts163 exercices, et un vrai mentorat humain, le tout gratuitement.