# LISP Questions & Answers – Difference Between Setq and Setf

This set of LISP Multiple Choice Questions & Answers (MCQs) focuses on “Difference Between Setq and Setf”.

1. What is the difference between setf and setq?
a) Setq is used for symbols only but setf can be used anywhere
b) No difference is there
c) Setf is used only for numbers but setq used anywhere
d) Setf is for lists and setq for numbers

Explanation: Setq is used only for setting the values of symbols but setf can be used for anything. Setf can be used for setting value of any data-type and not only symbols.

2. Choose the correct about Setf and Setq.
a) Setq can be used in place of setf but not vice versa
b) Setf can be used in place of setq but not vice versa
c) Both can be used in place of each other
d) Neither can be used in place of each other

Explanation: Setq is used only for symbols and setf is used for any data type, so Setf can be used in place of setq but setq cannot be used in place of setf.

3. How many arguments do setf or setq can have in single braces?
a) 2
b) 4
c) 28
d) Any even number of arguments.

Explanation: The setf and setq takes any number of arguments but the number must be even. Even is required because one of the two will be value taker and another one will be value giver. So, it always comes in a pair.

4. In multiple arguments in setf and setq, it prints ____
a) All the values
b) Only the first value
c) Only the last value
d) Numerically smallest value

Explanation: In the process of assigning values to multiple variables with setf and setq, the setf and setq prints only the last value assigned to a variable. It does not print all the values.

5. Setf refers to set field?
a) Yes
b) No

Explanation: The full form of setf is set field and it means that it sets the field with the value given.

6. What will the output after the execution of following LISP statement?

`(setq (car x) 2)`

a) 2
b) Error
c) X
d) 2X

Explanation: The statement will show error because (car x) is not a symbol and setq requires arg1 to be a symbol.
Output: Error

7. What will be the output after the execution of the following LISP statement?

`(setf (car '(a b cd)) 2)`

a) Error
b) 2
c) A
d) A B

Explanation: The (car ‘(a b cd)) will give A and then the setf give value 2 to it.
The setf doesn’t show error to this as it allows any type of datatype as arg1.
Output: 2

8. What is the value of (cdr ‘(a b c d)) after following LISP statements?

```(write (setf (cdr '(a b c d)) 2))
(write (cdr '(a b c d)))```

a) 2
b) B C D
c) A
d) A 2

Explanation: The setf will store the value 2 in (cdr ‘(a b c d)) but when it comes out of the setf braces and (cdr ‘(a b c d)) is again called then it is treated as a new statement and the value of (cdr ‘(a b c d)) again changes to B C D. We can say scope of setf’s cdr remain in that braces only. And the again called cdr has its new scope with its own values.
Output: 2 B C D.

9. What will be the value of pow(x,y) after this LISP statement?

`(setf x 5 y 4)`

a) 20
b) 1024
c) 625
d) 645

Explanation: The value of x is 5 and that of y is 4 after this statement’s execution. And pow(x,y) means x raised to power y in general. So pow(5,4) will give 625.

10. What will be the value of p after this program?

`(setf p 2) (setf p 3) (setf p 4)`

a) 2
b) 3
c) 4
d) Error