首页 > 解决方案 > 方案附加到列表而不附加?

问题描述

我一直在尝试在不使用附加运算符的情况下将 s 表达式附加到方案中的列表。到目前为止,我已经尝试使用一个名为“next-member”的辅助函数,它将迭代到列表的下一项。这可能是一个基本的递归问题,因为我是 Scheme 语法的新手,所以我无法理解它:

(define next-member
  (lambda lst
    (cond
      ((not (null? lst)) (car lst))
      (else (next-member (cdr lst)))
      )))

(define append-item
  (lambda (a b)
    (cond
      ((null? b) (list a))
      ((null? a) b)
      (else (list (car b) (next-member (cdr b)) a))
      )))

标签: schemeracket

解决方案


另一种方法是使用突变定义附加(append!有时或有时称为nconc)。这个想法是改变cdr最后一个列表元素的 以指向第二个列表而不是指向'()

另一种方法是使用折叠


推荐阅读