如何在cond中使用多个语句?

时间:2016-10-31 03:32:30

标签: scheme racket

例如,我有以下代码,我定义了一个变量v1,然后检查v1的值。如果v1 == 1,我想(print-list q2)并阅读其他输入并存储到v2,如下所示:(define v2 (read))

(define v1 (read))
(cond
  [(null? v1) (printf "No input..\n")]
  [(= v1 1) (print-list q2)]

如何实现上述解决方案?

2 个答案:

答案 0 :(得分:1)

您可以在cond条件后编写多个表达式:

(define v1 (read))

(cond
  [(null? v1) (printf "No input..\n")]
  [(= v1 1)
   (define v2 (read))
   (print-list q2)]
  [else (error "Unexpected value")])

当然,只有先前定义了print-listq2,上述内容才有效,但它说明了您想要做的一般想法。请记住,尽管条件之后的所有表达式都将按顺序执行,但只会返回最后一个表达式的值,在此示例中为(print-list q2)

答案 1 :(得分:0)

还可以使用递归重复读取:

(define (f)
  (let loop ((v (read)))
    (cond [(= 0 v) "End."]
          [(= 1 v) (println '(a b c))]
          ; [.. other options ..]
          [else
           (println '(1 2 3))
           (loop (read))])))

测试:

(f)

1
'(a b c)
0
"End."
>