ネストされたリストの各値に関数を適用するスキームでマッピング関数を記述しようとしています。
たとえば、(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)
[結果は(#t #f (#t #f))
]を返します。
これを修正するためにアルゴリズムを変更するにはどうすればよいですか?