在方案中构建列表

时间:2014-02-17 17:21:23

标签: scheme

我想做以下事情:

假设我们有一份数据清单(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.

3 个答案:

答案 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是列表或空列表。