You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:39:02