Запретить вывод терминала в LISP
Я хочу запустить функцию, но не выводить результат в терминал. Например, (set 'A 'B)
обычно возвращается B
в консоли вроде следующего:
>>> (set 'A 'B)
B
>>> A
B
Я не хочу, чтобы это что-то возвращало; Я все еще хочу, чтобы функция делала то, что должна, просто тихо:
>>> (set 'A 'B)
>>> A
B
3 ответа
Это не идеально, но вы можете использовать (значения) в конце вашего выражения для подавления вывода. Вместо этого вы получите пустую строку.
Common Lisp:
(progn (set 'A 'B) (values))
Я не уверен в эквиваленте в Схеме.
LISP REPL всегда печатает некоторое возвращаемое значение. Если вам действительно не нужен вывод, вы можете запустить свой код как скрипт в терминале.
Пример:
#!/path/to/interpreter
(set 'A 'B)
[rest of program]
Поскольку напечатанное значение фактически является возвращаемым значением вашей функции, а возвращаемое значение функции является значением последнего вычисленного выражения, вы можете просто добавить инструкцию "empty" (возвращая, например, "") в конце / после вашего вызов.
Я пришел к тому же решению, что и user1613254, однако для этого я создал макрос (он есть в моем.sbclrc):
(defmacro m-ignore (fun &body body)
"ignores the return value of a function"
`(progn (,fun ,@body)
(values)))
Вы используете это так:
(m-ignore format t "text")
Выход будет:
текст
вместо:
текст
NIL
который будет напечатан при использовании
(format t "text")