2012-07-23 12 views
4

我正在尝试解决一个基本功能。但我得到了一个错误,我的第二个if语句和else.Ff你可以给我一个帮助这里是代码。if else construction

(define (equation x) 
    (if(> x 2) (+(-(* x x) x) 4)) 
    (if (and (> x 1) (= x 1)) (and (< x 2) (= x 2)) (/ 1 x)) 
    (else 0) 
) 
+0

我不知道的计划,但会不会是你的意思'or's,而不是'and's? – 2012-07-23 14:14:59

+0

不,因为两个条件都需要是真的,我认为现在它只检查第二部分的第一部分,如果 – 2012-07-23 14:16:06

+0

x不能大于等于1但大于或等于1 .. – 2012-07-23 14:17:18

回答

5

您的代码中有几个错误。在处理多个条件时应该使用cond(将它想象为一系列IF/ELSE IF /.../ ELSE语句)。

注意表达(and (> x 1) (= x 1))永远是真实的,因为x或者是大于或等于1,两种情况都永远在同一时间是真实的。你可能意思是(or (> x 1) (= x 1)),但即使如此,表达式可以更简洁地编写为(>= x 1)。条件(and (< x 2) (= x 2))也适用同样的考虑因素。

我相信这是你瞄准:

(define (equation x) 
    (cond ((> x 2) 
     (+ (- (* x x) x) 4)) 
     ((and (>= x 1) (<= x 2)) 
     (/ 1 x)) 
     (else 0))) 
+2

sie senior grande muchachos – 2012-07-23 14:41:26

1

和(> X 1)(= X 1)是ALWAYSE假

和(<×2)(= X 2)总是假

没有操作者连接工作与第二个如果

+0

所以如果我想要1 <= x <= 2如何在方案中表示它 – 2012-07-23 14:18:23

+0

我不知道谢姆,但我认为它就像前缀符号一样。和(> x 0)( Ussr 2012-07-23 14:19:25

+0

@不重要:我发布那个答案3分钟前 – 2012-07-23 14:20:02

3

,如果条件是(if (condition) (consequent) (alternate))格式。 else不能与if一起使用。下面是相同的代码,而无需使用电导率/其他

(define (equation x) 
    (if (> x 2) 
     (+ (- (* x x) x) 4) 
     (if (and (or (> x 1) (= x 1)) (or (< x 2) (= x 2))) 
      (/ 1 x) 
      0))) 

或可替代

(define (equation2 x) 
    (if (< x 1) 
     0 
     (if (> x 2) 
      (+ (- (* x x) x) 4) 
      (/ 1 x))))