首页 > 解决方案 > Scheme中用“and”和“or”编写程序

问题描述

我正在使用 DrRacket 学习 Scheme,并正在研究一个名为 ' sign' 的过程,该过程接受一个参数,如果小于 0,则返回 -1,如果大于 0,则返回 1,如果 = 0,则返回 0。

我的代码如下

(define (sign x)
     (and (> x 0) 1)
      (and (= x 0) 0)
       (and (< x 0) -1))

我只能使用 ' and' 和 ' or' 在我的任务中编写代码,这意味着我不能使用 ' if' 和 ' cond' 等。

我的代码在使用或其他任何东西#t运行时返回。(sign 5)

标签: schemeracket

解决方案


首先,该sign过程已经存在并且您正在覆盖它,这是需要注意的。

所以你有这个要求,在你的实现中只使用and, 。or好吧,你只是错过了or一部分:)

(define (sign x)
  (or
   (and (> x 0) 1)
   (and (= x 0) 0)
   (and (< x 0) -1)))

例如:

(sign -10) ; -1
(sign 100) ;  1
(sign 0)   ;  0

推荐阅读