P: ¿cómo se prueba la igualdad de cadena pero se ignora el caso?
Tengo una situación en la que me gustaría comparar cadenas pero ignorar mayúsculas y minúsculas. El caso es significativo para string-equal, y aparentemente es insensible a case-fold-search:
(string-equal "string" "StrinG") ; => nil
(let ((case-fold-search t))
(string-equal "string" "StrinG")) ; => nil
Siempre podría preprocesar las cadenas (por ejemplo, con downcase) antes de compararlas:
(string-equal (downcase "string")
(downcase "StrinG")) ; => t
Pero eso parece excesivo hacer dos llamadas de funciones adicionales cada vez. ¿He pasado por alto la función de predicado relevante en alguna parte?

Respuestas:
Puedes usar
compare-strings:Use
nils para comenzar y terminar para usar las cadenas completas.fuente
nils como mencionaste. Dejaré la pregunta abierta un poco más en caso de que haya otra opción que no requiera 4nils adicionales en una llamada de función.Uso
string-suffix-p:Mucho más simple y no requiere 4
nils. No prueba si las cadenas son iguales per se ((string-suffix-p "word" "buzzword" t) ⇒ t). Aunque, en algunos casos, esto debería ser suficiente (si tiene un diccionario limitado para verificar).fuente
(string-suffix-p "strinG" "this string" t)También vuelvet. Esto no es lo que quiere el OP. Le sugiero que modifique o elimine esta respuesta.string-{prefix,suffix}-ppuede ser útil de muchas maneras: pruebe si la palabra en el punto tiene teclado (en SQL, por ejemplo, dónde se pueden mezclar mayúsculas y minúsculas), etc.Otra alternativa corta:
equalpes la abreviatura decl-equalp; de(documentation 'equalp):fuente