Estoy aprendiendo Erlang del libro web LearnYouSomeErlang. Una cosa que me sorprendió al aprender fue la conjunción booleana sin cortocircuito y los operadores de disyunción; and
y or
. ¿Cuáles son los casos de uso para estos operadores? ¿Por qué querría usarlos en lugar de andalso
y orelse
?¿Cuál es el uso de operadores booleanos sin cortocircuito en Erlang?
Respuesta
Solía ser (hasta R13A) que andalso
y orelse
no eran cola recursiva. Ver http://www.erlang.org/eeps/eep-0017.html para más detalles. No creo que haya una buena razón para usar and
/or
en nuevos programas.
Enlace de interés. ¡Gracias por la respuesta! – missingfaktor
Los operadores y/o son simplemente mucho más antiguos. Los operadores andalso/orelse son adiciones posteriores. Un caso de uso para y/o hoy podría serlo cuando solo desea realizar algunas operaciones booleanas simples y el espacio horizontal es más importante que posiblemente guardar un par de ciclos de la máquina. Por ejemplo:
X = Y and (A or B),
en lugar de
X = Y andalso (A orelse B),
es un poco más fácil en los ojos.
Por razones de compatibilidad con versiones anteriores, no fue posible cambiar el comportamiento del original y/o provocar un cortocircuito, por lo que se necesitaron nuevas palabras clave. Los nombres andalso/orelse provienen de ML estándar.
los veo como hacer las cosas diferentes y usarlos como tales:
and
/or
operadores lógicos en el que necesito para comparar los valores lógicos. Como son estrictos, recibo automáticamente la verificación de tipo e I CONOCER exactamente como se ha llamado.andalso
/orelse
para el control, al igual que&&
y||
en C.
errores Seeing se definen en Erlang siento que es bueno saber lo que se ha ejecutado y cómo ha ido.
1. 'andalso' y' orelse' también se pueden usar como operadores lógicos. 2. No entendí lo de la verificación de tipos. 3. Conocer lo que se ha llamado no debería importar con expresiones referencialmente transparentes; solo es relevante en el contexto de los efectos secundarios. – missingfaktor
Creo que lo que Robert está diciendo es que a veces uno quiere que todos los operandos sean evaluados para que puedan generar excepciones, incluso si no son necesarios para la evaluación del predicado. Es un buen punto. – dsmith
@dsmith: Sí, tanto eso como para comprobar que realmente devuelven valores booleanos. Tal vez estoy siendo excesivamente prudente, pero es bueno detectar errores tan pronto como sea posible. – rvirding
- 1. ¿Hay buenos usos para los operadores lógicos (booleanos) sin cortocircuito en Java/Scala?
- 2. ¿Cómo uso operadores booleanos con Hibernate Search
- 3. Operadores booleanos precedencia
- 4. ¿Cuál es la diferencia entre los operadores de cortocircuito de Perl (o, y) y (||, &&)?
- 5. operadores booleanos en una instrucción switch?
- 6. Diferencias en operadores booleanos: & vs && y | vs ||
- 7. comportamiento de bool con operadores no booleanos
- 8. ¿Por qué no hay operadores de cortocircuito elevados en `bool?`?
- 9. Operadores booleanos simples para indicadores de bit
- 10. operadores en cortocircuito y la recursión de cola
- 11. ¿Alguien está usando los operadores booleanos nombrados?
- 12. ¿Se pueden usar operadores booleanos con el preprocesador?
- 13. ¿Cuál es el significado de? = En operadores ABAP?
- 14. ¿Cuál es la mejor práctica con respecto a la evaluación de cortocircuito C#?
- 15. ¿Cuál es el uso significativo de los operadores más y menos únicos?
- 16. Comportamientos extraños de Solr/Lucene con operadores booleanos
- 17. Uso de operadores inversos en Python
- 18. JQuery/Javascript y el uso de operadores &&
- 19. ¿Cuál es el secreto de Erlang para la escalabilidad?
- 20. ¿Cuál es el uso del uso de init() en JavaScript?
- 21. ¿Qué (en las especificaciones) garantiza que los operadores lógicos que no sean de cortocircuito no se cortocircuitarán?
- 22. ¿Cuál es el uso de singletonList?
- 23. Cuál es la diferencia entre & y operadores & en C#
- 24. ¿Por qué usar el código de cortocircuito?
- 25. ¿Cuál es su experiencia con Nitrogen en Erlang?
- 26. ¿Cuál es el uso de Log4j API?
- 27. ¿Cuál es el uso de Deployment.Current.Dispatcher.BeginInvoke (() => {...})?
- 28. ¿Cuál es el uso previsto de IllegalStateException?
- 29. ¿Cuál es el uso de "indulgente"?
- 30. ¿Cuál es el uso correcto de DataContext.Refresh()?
Etiquetado con 'Programación lógica' porque me dijeron que esto tiene algo que ver con los orígenes de Erlang en Prolog. – missingfaktor
Relacionado: [Cuándo preferir 'y' a' andalso' en las pruebas de guardia] (http://stackoverflow.com/questions/6025132/when-to-prefer-and-over-andalso-in-guard-tests). – kay