【问题标题】:Constructing lists in scheme在方案中构建列表
【发布时间】:2014-03-17 02:55:38
【问题描述】:

我想做以下事情:

假设我们有一个数据列表 (3 2 1 5 4)

我想通过获取列表的前两个元素(汽车列表)和(cadr 列表)并将其与列表的其余部分(cddr 列表)连接来构造一个新列表。

在我的测试过程中,我尝试了多种方法来实现这一点,但都没有达到我想要的效果。在测试中,我正在寻找的结果是 (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.

【问题讨论】:

    标签: scheme


    【解决方案1】:

    给你:

    > (append (list (cadr b1) (car b1)) (cddr b1))
    (2 3 1 5 4)
    

    【讨论】:

    • 没关系,FatalProphet。但是,请不要傻,正确地学习优美的语言,而不是仅仅试图通过考试;)
    【解决方案2】:

    使用list*(在球拍中):

    (list* (cadr b1) (car b1) (cddr b1))
    

    cons*(在方案中):

    (import (rnrs))
    (display (cons* (cadr b1) (car b1) (cddr b1)))
    

    【讨论】:

      【解决方案3】:
      (cons (cadr b1) (cons (car b1) (cddr b1)))
      

      记住 list 是一个 cdr 是一个列表或空列表的对。

      【讨论】:

        猜你喜欢
        • 2013-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-05
        • 2011-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多