如何使用scheme将列表中等于atom1的所有元素替换为atom2

如何使用scheme将列表中等于atom1的所有元素替换为atom2,scheme,racket,Scheme,Racket,程序应将alist中等于atom1的所有元素替换为atom2。例如,如果我运行(replace23'(457282)),结果应该是(45733)。我不断收到错误信息“car:期望一对,如果是空的”。 提前谢谢各位 您的基本情况应该是检查空列表。对于list?,空列表仍然测试为真。所以第一个条件应该是(null?alist)非常感谢Chris! (DEFINE (replace atom1 atom2 alist) (COND ((NOT (LIST? alist)) #F)

程序应将
alist
中等于
atom1
的所有元素替换为
atom2
。例如,如果我运行
(replace23'(457282))
,结果应该是
(45733)
。我不断收到错误信息“car:期望一对,如果是空的”。
提前谢谢各位

您的基本情况应该是检查空列表。对于
list?
,空列表仍然测试为真。所以第一个条件应该是
(null?alist)

非常感谢Chris!
(DEFINE (replace atom1 atom2 alist)
  (COND
    ((NOT (LIST? alist)) #F)
    ;((LIST? atom1) #F)
    ;((LIST? atom2) #F)
    ((= (car alist) atom1) (cons atom2 (replace atom1 atom2 (cdr alist))))
    (ELSE (cons (car alist) (replace atom1 atom2 (cdr alist))))))