在Racket中打印cond中的多个语句

时间:2011-04-30 05:32:42

标签: scheme racket

在Racket中,我试图在“cond”语句中打印多个表达式,如下所示,

(let ((var `(make))
      (exp '(1 2)))
   (cond
      [(number? 2) `(hi ,var)
                   `(bye ,exp)]))

但只有“再见”声明在屏幕上返回/打印。第一个“hi”根本没有被删除。我如何退回/打印两者?

3 个答案:

答案 0 :(得分:6)

你说“退回/打印”,但这是两件截然不同的事情:

  • 如果您想要返回的内容,那么您应该使用multiple values,例如(values 1 2)(或者您可以返回包含这两个值的列表作为廉价黑客,以防您不了解多个价值观。)

  • 如果您要打印内容,请使用print两次(或displaywriteprintf等等。)

如果你是一个完整的新手,那么这些都不适合你。

答案 1 :(得分:1)

好吧,你并没有真正“打印”任何东西,只返回最后一个表达式(在这种情况下为`(bye ,exp))。如果要打印它们,请使用display

(cond ((number? 2)
       (display `(hi ,var))
       (display `(bye ,exp))))

答案 2 :(得分:0)

目前尚不清楚OP是否希望返回数据,或者打印

扩展Eli Barzilay对返回列表的建议,最简单的修改只是评估两个表达式上的list

(let ((var `(make))
      (exp '(1 2)))
   (cond
      [(number? 2) (list `(hi ,var)
                         `(bye ,exp))]))

返回

'((hi (make)) (bye (1 2)))

不会打印任何内容。另请注意,逗号(unquote)现在会导致评估局部变量var和exp。

Chris Jester-Young的回答显示如何打印评估的表达式,而返回什么都没有。