acf*_*zer 4 scheme boolean-logic syntactic-sugar
这是很容易表达and,or和not在以下方面if(与从本地绑定协助or)。我想知道反过来是否正确。我天真的第一次尝试:
(if test conseq altern) => (or (and test conseq) altern)
Run Code Online (Sandbox Code Playgroud)
但是,如果test是非#f并且conseq是#f,则翻译评估为altern,这是不正确的。
在保持 的短路特性的同时,是否存在评估为正确值的翻译if?
听起来你有一个很好的解释为什么if比andand做得更多or。但是,如果您可以作弊并添加一个lambda以延迟实际结果:
(define-syntax-rule (if c t e) ((or (and c (lambda () t)) (lambda () e))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
345 次 |
| 最近记录: |