从(值)lisp获取第一个和第二个结果

从(值)lisp获取第一个和第二个结果,lisp,Lisp,假设我将此代码发送到clisp解释器: (值“a”b) A B 现在我希望记录这些信息(使用setf)并从结果中访问a和B。 我以后如何访问这两个值? 我试着做: (setf结果(值“a”b)) A 它只存储“A”而不存储“B”。我如何才能做到这一点?正如您所见,lisp中的函数可以通过值表单返回多个值。如果要将值绑定到变量,可以使用多值绑定。范例 (multiple-value-bind (a b c) (values 1 2 3) (+ a b c)) 1将绑定到a,2将绑定到b,3将绑定

假设我将此代码发送到clisp解释器:

(值“a”b)
A
B

现在我希望记录这些信息(使用setf)并从结果中访问a和B。 我以后如何访问这两个值? 我试着做:

(setf结果(值“a”b))
A


它只存储“A”而不存储“B”。我如何才能做到这一点?

正如您所见,lisp中的函数可以通过值表单返回多个值。如果要将值绑定到变量,可以使用多值绑定。范例

(multiple-value-bind (a b c) (values 1 2 3) (+ a b c))

1将绑定到a,2将绑定到b,3将绑定到c,因此评估表单的结果将是6。如果您试图将值表单设置为var,则只会使用第一个值。

您应该查看。顺便说一下,如果您只想将结果存储在某个地方,
setf
是enaugh:
(setf(values x y)(values 1 2))