将元素列表中的元素复制到另一个列表

时间:2018-04-07 12:19:23

标签: racket

我是球拍的新手,我正在尝试从

复制每对的第二个元素

'(("a" . 1) ("c" . 3))

'(("a" . null) ("b" . null) ("c" .null))

正如您在示例中所看到的,我需要根据对中的第一个元素复制它们。基本上我正试图将它们合并为一个这样的:

'(("a".1) ("b".null) ("c" . 3))

1 个答案:

答案 0 :(得分:0)

球拍列表和缺点单元格不可变。如果要替换列表中的cons对,则必须生成新列表。因此,您的replace过程应将关联列表作为参数,并评估为已修改的关联列表。然后,策略可能会删除关联列表,直到找到元素或命中列表的末尾。

这里我使用符号而不是字符串,因此我可以使用eq?作为我的谓词:

(define (replace alist pair)
  (define target (car pair))
  (define (found? al)
    (eq? (caar al) target))
  (define (rpl al)
    (cond ((null? al)
           (list pair))
          ((found? al)
           (cons pair (cdr al)))
          (else (cons (car al)
                      (rpl (cdr al))))))
  (rpl alist))
相关问题