gpt4 book ai didi

lisp - Common Lisp : first returns first, 但 last 返回最后一个列表——嗯?

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

我没有在 Common-Lisp 中得到这个第一/最后的东西。是的,我知道它是如何工作的,但我不明白为什么它会这样工作。

基本上,要获取列表中的第一项,我可以使用(first mylist)。但是,如果我想要最后一项,(last mylist) 不会给我那个;相反,它给了我一个列表,其中包含我列表中的最后一项!

(我使用的是 Clozure-CL,它有一些其他的奇怪之处,对我来说似乎是错误,但是,因为我是 Lisp-n00b,所以我尽量不爱上旧的“解释器坏了” !"技巧 :) )

所以,例如:

? (setq x '((1 2) (a b)))
=> ((1 2) (A B))

? (first x)
=> (1 2) ; as expected

? (last x)
=> ((A B)) ; why a list with my answer in it?!

? (first (last x))
=> '(A B) ; This is the answer I'd expect from plain-old (last x)

谁能帮我理解 last 这样做的原因?我是否错误地使用了这些元素? first 真的很奇怪吗?!

谢谢!

最佳答案

在 Common Lisp 中,last 应该返回一个列表,来自 documentation :

last list &optional n => tail
list---a list, which might be a dotted list but must not be a circular list.
n---a non-negative integer. The default is 1.
tail---an object.

last returns the last n conses (not the last n elements) of list. If list is (), last returns ().

例如:

(setq x (list 'a 'b 'c 'd))
(last x) => (d)

是的,这是违反直觉的。在 Lisp 的其他版本中,它的工作方式正如其名称所暗示的那样,例如在 Racket(一种 Scheme 方言)中:

(define x '((1 2) (a b)))
(first x) => '(1 2)
(last x) => '(a b)

(define x (list 'a 'b 'c 'd))
(last x) => 'd

关于lisp - Common Lisp : first returns first, 但 last 返回最后一个列表——嗯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17731670/

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