添加元素到列表并返回Scheme中的列表

时间:2018-02-20 10:36:49

标签: recursion scheme racket

我试图定义一个接受字母列表的函数,并返回删除了最后一个元素的列表。我是一个相当新的计划,所以我不确定如果不在函数内部创建变量就可以实现这一点。 到目前为止,我已经开始:

define funct (lambda (x) 
    (let (list '() )
     (if ( < (length x) 2 ) list (append ( list (car x))

我是否可以像这样打一个递归调用:

(if ( < (length x) 2 ) list (append ( list (car x)) (set x (cdr x)) lambda (x))

或者这是非常错误的?

1 个答案:

答案 0 :(得分:1)

非常错误,是的。

推理如下:

  1. 如果列表为空,或者只有1个元素,则返回空列表
  2. 否则,保留第一个元素并重复列表的其余部分(递归)
  3. 在代码中:

    (define funct
      (lambda (lst)
        (if (or (null? lst) (null? (cdr lst)))
            '()
            (cons (car lst) (funct (cdr lst))))))
    

    测试:

    > (funct '())
    '()
    > (funct '(a))
    '()
    > (funct '(a b))
    '(a)
    > (funct '(a b c))
    '(a b)
    > (funct '(a b c d))
    '(a b c)