在Racket中,我试图在“cond”语句中打印多个表达式,如下所示,
(let ((var `(make))
(exp '(1 2)))
(cond
[(number? 2) `(hi ,var)
`(bye ,exp)]))
但只有“再见”声明在屏幕上返回/打印。第一个“hi”根本没有被删除。我如何退回/打印两者?
答案 0 :(得分:6)
你说“退回/打印”,但这是两件截然不同的事情:
如果您想要返回的内容,那么您应该使用multiple values,例如(values 1 2)
(或者您可以返回包含这两个值的列表作为廉价黑客,以防您不了解多个价值观。)
如果你是一个完整的新手,那么这些都不适合你。
答案 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的回答显示如何打印评估的表达式,而返回什么都没有。