gpt4 book ai didi

lisp - 如何处理普通 lisp 中的多个返回

转载 作者:太空宇宙 更新时间:2023-11-03 18:49:07 25 4
gpt4 key购买 nike

我有一个返回两个拆分列表的函数,如下所示:

((1 . 2) (3 . 4) (5 . 7))
((8 . 9) (10 . 23) (30 . 20))

common lisp中有没有像python一样的资源

a,b = 1,2
a = 1
b = 2

最佳答案

有两种选择。首先,您可以使用 VALUES 返回多个值.然后您可以使用 MULTIPLE-VALUE-BIND将返回值绑定(bind)到不同的变量。

(defun foo ()
(values '((1 . 2) (3 . 4) (5 . 7))
'((8 . 9) (10 . 23) (30 . 20))))

(multiple-value-bind (a b) (foo)
(format t "~&A: ~s~%B: ~s~%" a b))
; A: ((1 . 2) (3 . 4) (5 . 7))
; B: ((8 . 9) (10 . 23) (30 . 20))

这与 Python 有点不同,因为您可以调用该函数,就像它只返回一个值一样,其他值将被静默丢弃。当第一个值本身有意义时,通常会使用多个返回值,而其他值只是补充信息(例如参见 FLOOR )。

在这种情况下,这两个值似乎相互关联(因此仅使用第一个值是没有意义的)。所以在这种情况下,最好返回一个列表或一个cons-cell。您可以使用 DESTRUCTURING-BIND将元素分配给变量。

(defun bar ()
(list '((1 . 2) (3 . 4) (5 . 7))
'((8 . 9) (10 . 23) (30 . 20))))

(destructuring-bind (a b) (bar)
(format t "~&A: ~s~%B: ~s~%" a b))
; A: ((1 . 2) (3 . 4) (5 . 7))
; B: ((8 . 9) (10 . 23) (30 . 20))

关于lisp - 如何处理普通 lisp 中的多个返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37639171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com