【问题标题】:Multiple conditions in scheme方案中的多个条件
【发布时间】:2017-04-20 15:53:35
【问题描述】:

我无法理解如何在方案中正确地创建多重条件 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 代码的第一行,我想说如果列表中的 car 大于 0,而 cadr 小于 0,我希望它采取某种行动,但我受到了欢迎and 运算符的语法错误。我很困惑,非常感谢您的解释。

【问题讨论】:

    标签: syntax scheme multiple-conditions


    【解决方案1】:

    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)
    

    因此,当您要检查(&gt; (car lst) 0)(&lt; (cadr lst) 0) 是否为同一类型时,cond-question 变为(and (&gt; (car lst) 0) (&lt; (cadr lst) 0))

    【讨论】:

    • 谢谢,由于某种原因,我看到了很多使用 () 而不是方括号 [] 的示例。
    • 括号和方括号在 Racket 中是等价的;使用它们来提供视觉对比。
    猜你喜欢
    • 1970-01-01
    • 2019-08-01
    • 2017-03-06
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多