我正在尝试在方案中编写一个映射函数,该函数将一个函数应用于嵌套列表中的每个值。
例如,(map number? '(3 (2 A) 2 Z)
应该返回(#t (#t #f) #t #f)
这是我到目前为止所拥有的:
(define (map fun lst)
(if (null? lst) '()
(if (list? (car lst))
(cons (map fun (car lst)) (map fun (cdr lst)))
(cons (fun (car lst)) (map fun (cdr lst))))))
如果嵌套列表位于列表的前面,它会起作用。例如(map number? '((3 A) 2 Z))
正确返回((#t #f) #t #f)
当嵌套列表出现在原始列表中的另一个元素之后时,就会出现问题。例如(map number? '(3 A (2 Z)))
错误地返回(#t #f #f)
[The result should be (#t #f (#t #f))
]
我怎样才能改变我的算法来纠正这个问题?