如何检查我的列表以查看它是否只包含一个值或多个值?

时间:2017-04-11 01:55:58

标签: scheme lisp

这是我到目前为止所拥有的:

(DEFINE (swap lst)
  (COND ((NULL? lst) lst)
    (IF (lst --------))
))

我是Scheme的新手,所以我现在有点困惑。对于这个功能,我应该检查一些事情:

  1. 列表是空的吗?如果是这样,请打印出未更改的空列表。
  2. 列表是单个原子(元素)吗?如果是这样,请打印出未更改的列表。
  3. 如果列表不为空并且具有多个原子,则计算对和交换 这些对的订单。     即如果我的清单是(a b c d e f g)          然后我的功能应该返回(b a d c f e g)
  4. 我的主要问题是如何检查我的列表以查看它是单个值还是多个值。

1 个答案:

答案 0 :(得分:2)

检查列表是否没有元素很简单:

(null? lst)

现在,我们如何验证它是否只有一个元素?它与之前的情况非常相似,我们只是检查当前的元素是否为空列表:

(null? (cdr lst))

之后,问题的解决方案来自定义:

(define (swap lst)
  (cond ((null? lst) lst)
        ((null? (cdr lst)) lst)
        (else <do your thing>)))

对于最后一种情况,请注意cons第二个元素到第一个元素,以递归方式处理列表的其余部分;还记得在这种情况下获得&#34;休息&#34;我们必须一次超过两个元素。