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

Scheme 如何检查列表以查看它是否只包含一个值或多个值?,scheme,lisp,Scheme,Lisp,以下是我目前掌握的情况: (DEFINE (swap lst) (COND ((NULL? lst) lst) (IF (lst --------)) )) 我不熟悉这个计划,所以我现在有点困惑。对于这个函数,我应该检查一些东西: 名单是空的吗?如果是,则打印出未更改的空列表 列表是单个原子(元素)吗?如果是,请打印未更改的列表 如果列表不是空的并且有多个原子,则计算出对并交换 这些对的顺序。 i、 e.如果我的名单是(a b c d e f g) 那么我的函数应该返回(b a d

以下是我目前掌握的情况:

(DEFINE (swap lst)
  (COND ((NULL? lst) lst)
    (IF (lst --------))
))
我不熟悉这个计划,所以我现在有点困惑。对于这个函数,我应该检查一些东西:

  • 名单是空的吗?如果是,则打印出未更改的空列表
  • 列表是单个原子(元素)吗?如果是,请打印未更改的列表
  • 如果列表不是空的并且有多个原子,则计算出对并交换 这些对的顺序。 i、 e.如果我的名单是(a b c d e f g) 那么我的函数应该返回(b a d c f e g)

  • 我的主要问题是如何检查列表,看它是否有单个值或多个值。

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

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

    (null? (cdr lst))
    
    然后,从定义中获得问题的解决方案:

    (define (swap lst)
      (cond ((null? lst) lst)
            ((null? (cdr lst)) lst)
            (else <do your thing>)))
    
    (定义(交换lst)
    (条件((空?lst)lst)
    ((空?(cdr lst))lst)
    (其他))
    

    对于最后一种情况,注意
    cons
    ing第二个元素到第一个元素,再到递归处理列表其余部分的结果;还要记住,在这种情况下,为了获得“rest”,我们必须一次前进两个元素。

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

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

    (null? (cdr lst))
    
    然后,从定义中获得问题的解决方案:

    (define (swap lst)
      (cond ((null? lst) lst)
            ((null? (cdr lst)) lst)
            (else <do your thing>)))
    
    (定义(交换lst)
    (条件((空?lst)lst)
    ((空?(cdr lst))lst)
    (其他))
    

    对于最后一种情况,注意
    cons
    ing第二个元素到第一个元素,再到递归处理列表其余部分的结果;还请记住,在这种情况下,为了获得“剩余”,我们必须一次前进两个元素。

    我碰巧在这里找到了您对类似问题的回答:
    (定义(交换lst)(COND((NULL?lst)lst)((NULL?(CDR lst))lst)(ELSE(CONS(CADR lst)(CONS)(CAR lst)但是当我把它给我的教授看时,他说他对其他部分有疑问。你怎么看?我碰巧在这里找到了你对类似问题的回答:
    (定义(swap-lst)(COND((NULL?lst)lst)((NULL?(CDR-lst))lst)(其他(CONS)(反对)但是当我把它给我的教授看时,他说他对其他部分不确定。你怎么看?