方案:获取不带括号的 cdr
这可能是我错过的一件简单的事情,但我试图获取一对的 cdr
以及每次调用 (cdr (cons 'a '5))
code> 返回为 (5)
。我有点明白为什么会这样,但是我怎样才能让它在没有括号的情况下返回呢?
我不想使用 flatten
因为我试图获取的内容(即 cdr)本身可能是另一个已经包含在括号中的过程表达式,所以我不想展平列表。
(如果重要的话,我正在努力将 let
表达式转换为 lambda
表达式,这是我正在采取的步骤之一,试图分解lambda 绑定,这样我就可以移动它们)。
This is probably a simple thing I'm missing, but I'm trying to get the cdr
of a pair and every call to say (cdr (cons 'a '5))
comes back as (5)
. I sort of get why that is, but how can I get the it to return without the parens?
I don't want to use flatten
because what I'm trying to get (i.e. the cdr) might itself be another procedure expression already wrapped in parens, so I don't want to flatten the list.
(If it matters, I'm working on transforming a let
expression into a lambda
expression, and this is one of the steps I'm taking, trying to break apart the lambda bindings so I can move them around).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当应用于正确的列表时,
cdr
将始终返回另一个列表(包括'()
,即空列表)。对于正确的列表,我的意思是一个以空列表结尾的列表。例如,当您在后台执行此
(define lst '(4 5))
时,这就是分配给lst
的内容:(cons 4 (cons 5 '()))
,因此当您计算(cdr lst)
时,您将获得第一个cons
的第二个元素,其中恰好是(缺点 5 '())
,依次打印为(5)
。要仅提取 list 中的第二个元素(不是第一个
cons
的第二个元素,这是cdr
所做的),您可以(car (cdr lst))
或简称(cadr lst)
(second lst)
code>(define cell (cons 4 5))
或(define cell '(4 . 5))
构建一个 cons 单元并那么您可以使用(car cell)
提取第一个元素,使用(cdr cell)
提取第二个元素。When applied to a proper list,
cdr
will always return another list (including'()
, the empty list).With proper list I mean a list which ends with the empty list. For instance, when you do this
(define lst '(4 5))
under the hood this is what gets assigned tolst
:(cons 4 (cons 5 '()))
, so when you evaluate(cdr lst)
you get the second element of the firstcons
, which happens to be(cons 5 '())
, which in turn gets printed as(5)
.For extracting only the second element in the list (not the second element of the first
cons
, which is whatcdr
does) you could:(car (cdr lst))
or just(cadr lst)
for short(second lst)
(define cell (cons 4 5))
or(define cell '(4 . 5))
to build a cons cell and then you can use(car cell)
to extract the first element and(cdr cell)
to extract the second element.