我想做以下事情:
假设我们有一份数据清单(3 2 1 5 4)
我想通过获取列表的前两个元素(car list)和(cadr list)并将其与列表的其余部分(cddr list)连接来构建一个新列表。
在我的测试过程中,我尝试了很多方法来实现这一点,但没有一个方法能够达到我想要的效果。在测试中,我要找的结果是(2 3 1 5 4)。
以下是我尝试过的事情。
> (define b1 '( 3 2 1 5 4))
> b1
(3 2 1 5 4)
> (list (cadr b1) (car b1) (cddr b1))
(2 3 (1 5 4)) -- notice here that it becomes a list inside of a list.
> (cons (cadr b1) (cons (car b1) (cons (cddr b1) '())))
(2 3 (1 5 4)) -- notice here that it becomes a list inside of a list.
> (list (cons (cadr b1) (car b1)) (cddr b1))
((2 . 3) (1 5 4)) -- Something strange happens here, we get a period.
答案 0 :(得分:1)
你走了:
> (append (list (cadr b1) (car b1)) (cddr b1))
(2 3 1 5 4)
答案 1 :(得分:0)
使用list*
(在Racket中):
(list* (cadr b1) (car b1) (cddr b1))
或cons*
(在方案中):
(import (rnrs))
(display (cons* (cadr b1) (car b1) (cddr b1)))
答案 2 :(得分:0)
(cons (cadr b1) (cons (car b1) (cddr b1)))
记住,列表是一对,其cdr是列表或空列表。