2013-05-04 2 views
2

Я хочу запустить функцию, но не выводить результат в терминал. Например, (set 'A 'B) обычно возвращает B в консоли, как следующее:предотвратить вывод терминала в LISP

>>> (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] 
0

Я пришел к такому же решению, как 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") 
1

Поскольку значение печататься фактически возвращаемое значение вашей функции, а возвращаемое значение функции это значение последнего выражения, вы можете просто добавить «пустой» (например, возвращаемый "") в конце/после вашего вызова.