3

I want to run a function but not have it output the result in the terminal. For example, (set 'A 'B) normally returns B in the console like the following:

 >>> (set 'A 'B)
 B
 >>> A
 B

I don't want it to return anything; I still want the function to do what it's supposed to, just silently:

 >>> (set 'A 'B)
 >>> A
 B

3 Answers 3

4

It's not perfect, but you can use (values) at the end of your expression to suppress output. You get a blank line instead.

Common Lisp:

(progn (set 'A 'B) (values))

I'm not sure of the equivalent in Scheme.

A lisp REPL always prints some return value. If you really didn't want output, you could run your code as a script in the terminal.

Example:

#!/path/to/interpreter
(set 'A 'B)
[rest of program]
Sign up to request clarification or add additional context in comments.

Comments

1

Since the value printed is actually a return value of your function, and the return value of a function is the value of last expression evaluated, you can simply add an "empty" (returning e.g. "") instruction at the end of/after your call.

Comments

0

I came to the same solution as user1613254, however I made a macro for this (have it in my .sbclrc):

(defmacro m-ignore (fun &body body)
"ignores the return value of a function"
  `(progn (,fun ,@body) 
  (values)))

You use it like this:

(m-ignore format t "text")

The output would be:
text

instead of:
text
NIL

which would be printed when using

(format t "text")

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.