Tracks
/
Factor
Factor
/
Ejercicios
/
Estudio de caracteres
Estudio de caracteres

Estudio de caracteres

Ejercicio de aprendizaje

Introducción

Los caracteres en Factor son enteros (puntos de código Unicode), así que los <, >, = numéricos te dan directamente un orden sensible a mayúsculas y minúsculas. El vocabulario unicode agrega predicados que entienden Unicode y la conversión de mayúsculas y minúsculas de un solo carácter.

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. Las versiones para cadenas, >upper y >lower, las aplican a cada carácter de una cadena.

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

capitalize convierte toda una cadena a minúsculas y luego pone en mayúscula su primer carácter, es decir, el formato de título de una sola palabra:

"hELLO" capitalize .   ! => "Hello"

Literales de caracteres

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

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

Símbolos

Cuando una palabra necesita devolver una etiqueta en lugar de un valor (por ejemplo, yes/no/maybe en lugar de un Boolean), declara cada etiqueta como un símbolo. Un símbolo es una palabra que se empuja a sí misma cuando se llama, y dos símbolos se consideran iguales solo cuando son 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 en su proyecto de alfabetos humanos y te pregunta si puedes ayudarla a programar algunas palabras que va a necesitar.

1. Compara 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 al segundo. Compara distinguiendo 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. Determina 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. Cambia el tamaño de un carácter

A veces, Heidi necesita cambiar un carácter a un tamaño diferente. Define change-size-of-char para que tome un carácter y un tamaño deseado (big o small) y devuelva el carácter con la capitalización correspondiente.

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

4. Determina 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 una pestaña nuevas
Factor Exercism

¿Todo 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.