方案中的多个条件

Multiple conditions in scheme

我无法理解如何在方案中正确制作多重条件 if 语句的概念。例如

if(a>b && b<c){ action; }

在我熟悉的大多数编程语言中,但这在方案中证明是一项艰巨的任务。

(define (my-list-ref lst)
    (cond (and((>(car lst)0) (<(cadr lst)0))
          ((+ n 1)(my-list-ref (cdr list)))
          (and((<(car lst)0) (>(cadr lst)0)))
          (zero? car lst)
          (my-list-ref(cdr lst))
          (null? lst)
          (display n))))

在 cond 代码的第一行,我想说如果列表中的汽车大于 0,并且 cadr 小于 0,我希望它采取某种行动,但我遇到 and 运算符的错误语法错误。我很困惑,非常感谢解释。

cond 的语法是这样的:

(cond
  [question1 expression1]   
  [question2 expression2]   
  [question3 expression3]   
  [else      expression4])

请注意,我使用的是方括号。在 Scheme 中,方括号和普通括号的含义相同。使用方括号时更容易看到分组。

你的例子变成这样:

(define (my-list-ref lst)
  (cond
    [(and (> (car lst) 0) (< (cadr lst) 0))    (my-list-ref (cdr list))]
    [(and (< (car lst) 0) (> (cadr lst) 0))    some-action-here]
    [(zero? car lst)                           (my-list-ref(cdr lst))]))

这里注意and的语法是这样的:

 (and expression1 expression2)

所以当你想检查 (> (car lst) 0)(< (cadr lst) 0) 是否在同一类型时,cond-question 变成 (and (> (car lst) 0) (< (cadr lst) 0)).