Rutas
/
Factor
Factor
/
Ejercicios
/
Estudio de caracteres
Estudio de caracteres

Estudio de caracteres

Ejercicio de aprendizaje

Introducción

Los caracteres en Factor son números enteros, es decir, puntos de código Unicode, así que los operadores numéricos <, >, = te dan directamente un orden que distingue mayúsculas de minúsculas. El vocabulario unicode añade predicados que tienen en cuenta Unicode y la conversión de mayúsculas y minúsculas de caracteres sueltos.

Predicados de caracteres

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

Conversión de mayúsculas y minúsculas

ch>upper y ch>lower cambian un solo carácter. >upper y >lower, a nivel de string, los aplican a todos los caracteres de un string.

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

capitalize pasa todo un string a minúsculas y después pone en mayúscula su primer carácter, lo que da la capitalización de una sola palabra:

"hELLO" capitalize .   ! => "Hello"

Literales de carácter

CHAR: A se convierte al punto de código entero de A. Para los caracteres con nombre, usa los nombres space, tab, \n, etc.:

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

Símbolos

Cuando una palabra tiene que devolver una etiqueta en lugar de un valor, por ejemplo yes/no/maybe en vez de un Boolean, declara cada etiqueta como un símbolo. Un símbolo es una palabra que se apila a sí misma cuando se llama, y dos símbolos se consideran iguales solo si tienen el mismo nombre.

USING: kernel ;

SYMBOLS: yes no maybe ;

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

SYMBOL: name declara uno; SYMBOLS: a b c ; declara varios.

Instrucciones

Heidi, una joven alienígena de Forth, necesita avanzar un poco en su proyecto de alfabetos humanos y te pregunta si puedes ayudarla a programar algunas palabras que necesitará.

1. Comparar dos caracteres

Define compare-chars para que tome dos caracteres y devuelva el símbolo less, greater o equal, según si el primero es menor que, mayor que o igual que el segundo. Compara distinguiendo entre mayúsculas y minúsculas.

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. Determinar el tamaño de un carácter

Heidi necesita saber si un carácter es «big» (mayúscula), «small» (minúscula), o si no tiene tamaño. Define size-of-char para que devuelva big, small o 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. Cambiar el tamaño de un carácter

A veces Heidi necesita cambiar un carácter a otro tamaño. Define change-size-of-char para que tome un carácter y un tamaño deseado (big o small) y devuelva el carácter en la caja correspondiente.

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

4. Determinar el tipo de un carácter

Heidi también necesita saber qué tipo de carácter es. Define type-of-char para que devuelva:

  • alpha para cualquier letra (mayúscula o minúscula)
  • numeric para un dígito decimal
  • space para el carácter de espacio
  • newline para el carácter de nueva línea
  • unknown en cualquier otro caso
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
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Factor Exercism

¿Listo para empezar Estudio de caracteres?

Regístrate en Exercism para aprender y dominar Factor con 47 conceptos163 ejercicios y mentoría humana real, todo gratis.