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.
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
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"
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
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.
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.
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
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
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)
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 decimalspace para el carácter de espacionewline para el carácter de nueva líneaunknown en cualquier otro casoCHAR: 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
Regístrate en Exercism para aprender y dominar Factor con 47 conceptos163 ejercicios y mentoría humana real, todo gratis.