Scheme中仅用and/or实现sign过程,运行返回#t问题求解
错误原因
- 你的函数体内写了三个独立的
and表达式,Scheme 过程执行时会依次计算所有过程体表达式,最终仅返回最后一个表达式的求值结果,前两个and的计算结果会被直接丢弃,这是你拿到错误返回值的核心原因。 - 你没有利用
and和or的短路求值特性:and只有所有子表达式为真时才返回最后一个子表达式的值,否则返回第一个假值;or会直接返回第一个为真的子表达式的值,剩余子表达式不会被求值。
修正后的代码
(define (sign x) (or (and (> x 0) 1) (and (= x 0) 0) (and (< x 0) -1)))
代码逻辑说明
三个互斥的and分支通过or串联:
- 当参数大于0时,第一个
and求值结果为1,or捕获到真值直接返回1,后续分支不执行 - 当参数等于0时,第一个
and返回假值,第二个and求值结果为0,or直接返回0 - 当参数小于0时,前两个
and都返回假值,第三个and求值结果为-1,or返回-1
内容的提问来源于stack exchange,提问作者N.A.
相关产品推荐
相关产品推荐

