Scheme值反转问题:布尔值正常但数值反转失效求助
修正你的Scheme
inverse 函数 你的思路完全没问题——对布尔值取反、对数值反转正负,但数值处理部分犯了个Scheme语法的小错误:在Scheme中,一元负号操作必须用括号包裹,也就是(- x),而不是- x。后者会被解释成两个独立的符号(减号和变量x),而不是一个取反操作,所以无法正确计算数值的相反数。
修正后的代码
(define inverse (lambda (x) (cond ((eq? x #t) #f) ((eq? x #f) #t) (else (- x)))))
测试验证
- 布尔值测试:
(inverse #t)返回#f,(inverse #f)返回#t,和预期一致。 - 数值测试:
(inverse 5)返回-5,(inverse -3)返回3,现在可以正确反转正负了。
如果后续需要处理更多类型(比如字符串、列表等),可以在cond里添加更多分支,但当前代码已经完美满足你提出的需求啦!
内容的提问来源于stack exchange,提问作者Adam Morad
相关产品推荐
相关产品推荐

