las cadenas se pueden indexar directamente sin crear una secuencia a partir de entonces y tomando la primera de esa secuencia.
(= (nth "clojure" 0) \c)
=> true
llamadas nth a través de este código Java:
static public Object nth(Object coll, int n){
if(coll instanceof Indexed)
return ((Indexed) coll).nth(n); <-------
return nthFrom(Util.ret1(coll, coll = null), n);
}
que se lee de manera eficiente el carácter directamente.
primera llamada a través de este código java:
static public Object first(Object x){
if(x instanceof ISeq)
return ((ISeq) x).first();
ISeq seq = seq(x); <----- (1)
if(seq == null)
return null;
return seq.first(); <------ (2)
}
que construye una ss para la cadena (1) (construcción de una ss es muy rápido) y luego toma el primer elemento de esa SEC (2). después del regreso, el seq es basura.
Seqs son claramente la forma más idónea de acceder a cualquier cosa secuencial en clojure y no los estoy golpeando en absoluto. Es interesante estar al tanto de lo que estás creando cuando. es probable que todas las llamadas al first
con llamadas al nth
sean un caso de optimización prematura.si desea que el carbón número 100 en la cadena se recomienda usar una función de acceso indexado como enésimo
en resumen: No se preocupe por las cosas pequeñas :)
Lo que me gusta de Clojure es que no oculta Java cuando no es necesario, entonces +1. – ponzao