【发布时间】:2022-01-16 01:51:12
【问题描述】:
Scheme 中 and 和 or 是否短路?
以下是lat?(原子列表)的两个实现。一个使用cond ... else,另一个使用or 和and。我想知道它们是否等效,而答案取决于 or 和 and 在 Scheme 中是否有短路评估。
(define lat?
(lambda (l)
(cond
((null? l) #t)
((atom? (car l)) (lat? (cdr l)))
(else #f))))
- 使用
cond和else
(define lat?
(lambda (l)
(or (null? l)
(and (atom? (car l))
(lat? (cdr l))))))
- 使用
or和and
我认为or 短路了。为什么?我知道(car ()) 和(cdr ()) 各自生产Error: Attempt to apply…。如果or 没有短路,那么(lat? ()) 最终将评估(car ()) 并产生错误。但是,(lat? ()) 不会产生错误,因此(通过 Modus Tollens)or 短路。它是否正确? and 短路了吗?
【问题讨论】:
标签: scheme short-circuiting short-circuit-evaluation