Desde que escribí el comentario voy a escribir una respuesta. (La respuesta de skuro proporciona toda la información, pero tal vez demasiada)
- Primero de todo, creo que las cosas más importantes deben estar en primer lugar.
seq
es precisamente lo que todo el mundo usa la mayor parte del tiempo, pero está bien empty?
a su justo (not (seq lat))
- En Clojure '() es verdadera, por lo normaly que desea devolver algo eso es falso si se termina la secuencia.
- si solo tiene una rama en su propiedad y si la otra devuelve false/'() o algo por el estilo, ¿por qué debería escribir esa rama?
when
tiene una sola rama, esto es especialmente bueno si quieres tener efectos secundarios. No es necesario que use do
.
Vea este ejemplo:
(si es falso '() (do (println 1) (println 2) (println 3)))
puede escribir
(cuando es verdadero (println 1) (println 2) (println 3))
No es tan diferente, pero creo que es mejor leer.
P.S.
No es que no son funciones llamadas if-not
y when-not
que son a menudo mejor que (if (not true) ...)
Supongo que [este hilo] (http://stackoverflow.com/questions/5830571/why-did-father-of-clojure-say-that-schemes-true-false-are-broken) debería ser de ayuda clasificando esto – skuro
Un valor falso es ciertamente más útil para devolver que uno verdadero. Otros ceceos (como Common Lisp) tratan la lista vacía como falsy. Clojure no sigue el ejemplo, como se describe en las respuestas en el enlace de skuro. Me sorprendería si '(si (SEC alguna lista) ...' _siempre_ ejecutado la primera forma. –
Esquema frecuencia no devuelve una lista vacía, a menudo procedimientos de Scheme volverán '# F' o ningún valor todos. la lista vacía se devuelve en su mayoría como el caso base de procedimientos recursivos. – amoe