S-выражение ((+ x 3) y)
не может быть вычислено, потому что первый элемент списка не является функционально вызываемым (оно должно называть функцию или быть лямбда-выражением).
Итак, чтобы избежать оценки, вам нужно процитировать его:
(if (<my condition>)
(values str '((+ x 3) y))
(values str '((+ x 2) y)))
Затем вы вернете список длины 2 (содержащий список длины 3 и символ y
) в качестве второго значения. Однако если вы хотите вернуть значения (+ x 2)
и y
в списке, вам нужно будет сделать что-то вроде
(values str (list (+ x (if <condition> 3 2)) y))
или, возможно, вернуть 3 значения вместо 2:
(values str
(+ x (if <condition> 3 2))
y)
С другой стороны, y
— это символ, который, по-видимому, называет функцию в вашем образе, поэтому (y (+ x 3))
оценивается нормально (он вызывает функцию y
в результате добавления 3
к x
).
person
sds
schedule
04.03.2014
((+ x 3) y)
делает или должен делать? - person Rainer Joswig   schedule 04.03.2014(y (+ x 3))
должно быть буквальным'(y (+ x 3))
или, возможно, отсутствует оператор(* y (+ x 3))
? Возможно, вы определили функциюy
? - person Sylwester   schedule 06.03.2014