如何创建一个接收列表的函数并在 Scheme 中创建一个新列表

How to create a function that receives a list and creates a new list in Scheme

我正在尝试创建一个名为 evenElememt 的函数,它将列表作为参数并将偶数位置的所有元素附加到新列表并显示新列表。

我的尝试:

(define newList '())

(define elementHelper
  (lambda lst
      ((cdr lst)
      (cons newList (car lst))
      (elementHelper(cdr lst)))
  )
)

(define evenElement
  (lambda (lst)
    (cond
      ((null? lst) ())
      ((null? (cdr lst)) ())
      (else (elementHelper lst)
            (display lst))
    )
  )
)

示例输出:如果我输入 (evenElement '('a 'b 'c 'f 't 'y)),输出应该是 (b f y)

您不需要 elementHelper。只需将 evenElement return 作为结果而不是显示它。

您也不需要全局变量newList。该函数应按原样构建结果。

(define evenElement
  (lambda (lst)
    (cond
     ((null? lst) '())
     ((null? (cdr lst)) '())
     (else (cons (car (cdr lst)) 
           (evenElement (cdr (cdr lst)))))
     )
    )
  )

(display (evenElement '(a b c f t y)))

这与 基本相同,只是您要打印偶数位置(1 索引)而不是奇数位置。

(define (even-positions lst)
  (cond ((null? lst)
         '())
        ((null? (cdr lst))
         '())
        (else
          (cons (second lst)
                (even-positions (cddr lst))))))

(even-positions '(a b c f t y)) returns '(b f y).

那么,这就是您要查找的函数:

(define (display-even-positions lst)
  (display (even-positions lst)))