Печать нескольких выписок в cond в Racket - PullRequest
0 голосов
/ 30 апреля 2011

В Racket я пытаюсь напечатать несколько выражений в выражении «cond», как показано ниже,

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

Но на экране возвращается / печатается только выражение «пока».не оценивается вообще.Как мне вернуть / распечатать оба?

Ответы [ 3 ]

6 голосов
/ 30 апреля 2011

Вы говорите «возвращено / напечатано», но это две совершенно разные вещи:

  • Если вы хотите, чтобы вещи возвращались, тогда вам следует использовать несколько значений ,например, (values 1 2) (или вы можете вернуть список с двумя значениями как дешевый хак, если вы не знаете о нескольких значениях).

  • Если вы хотите напечатать материал,затем дважды используйте print (или display, или write, или printf и т. д. и т. д.).

Если вы полный новичок, то, скорее всего, ни один из них не является правильным решением для вас.

1 голос
/ 30 апреля 2011

Ну, вы на самом деле ничего не «печатаете», просто возвращаете последнее выражение (`(bye ,exp) в данном случае). Если вы хотите распечатать их, используйте display:

(cond ((number? 2)
       (display `(hi ,var))
       (display `(bye ,exp))))
0 голосов
/ 15 ноября 2014

Не ясно, хочет ли ОП вернуть данные или распечатать их.

Расширяя предложение Эли Барзилай вернуть список, простейшей модификацией будет простое вычисление list по двум выражениям:

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

Это возвращает

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

но ничего не печатает . Также обратите внимание, что запятая ( unquote ) теперь приводит к оценке обеих локальных переменных, var и exp.

Ответ Криса Джестера-Янга показывает, как напечатать вычисленные выражения, в то время как возвращает ничего не делая.

...