es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

En Scheme, ¿`or` y `and` realizan cortocircuito?

¿Hacen and y or cortocircuito en Scheme?

A continuación se presentan dos implementaciones de lat? (lista de átomos). Una utiliza condelse y la otra utiliza or y and. Me preguntaba si son equivalentes y la respuesta depende de si or y and tienen evaluación de cortocircuito en Scheme.


(define lat?
(lambda (l)
(cond
((null? l) #t)
((atom? (car l)) (lat? (cdr l)))
(else #f))))

  • utiliza cond y else


(define lat?
(lambda (l)
(or (null? l)
(and (atom? (car l))
(lat? (cdr l))))))

  • utiliza or y and

Creo que or hace cortocircuito. ¿Por qué? Sé que (car ()) y (cdr ()) producen cada uno Error: Attempt to apply.... Si or no hiciera cortocircuito, entonces (lat? ()) eventualmente evaluaría (car ()) y produciría el error. Sin embargo, (lat? ()) no produce el error. Por lo tanto (a través de Modus Tollens), or hace cortocircuito. ¿Es esto correcto? ¿Y hace and cortocircuito?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, and y or ambos hacen una evaluación de circuito corto en Scheme. En la implementación de lat? que utiliza or y and, si (null? l) evalúa a #t, entonces la expresión completa se evalúa como #t sin evaluar el resto de la expresión. De manera similar, si (null? l) evalúa a #f y (atom? (car l)) evalúa a #f, entonces la expresión completa se evalúa como #f sin evaluar (lat? (cdr l)). Por lo tanto, las dos implementaciones son equivalentes.

Comments are closed.