I apologize for the unclear topic title.
I have this function in Scheme which is a custom implementation of the map
function. It works fine, but I got lost trying to understand it.
(define (my-map proc . ls)
(letrec ((iter (lambda (proc ls0)
(if (null? ls0)
'()
(cons (proc (car ls0))
(iter proc (cdr ls0))))))
(map-rec (lambda (proc ls0)
(if (memq '() ls0)
'()
(cons (apply proc (iter car ls0))
(map-rec proc (iter cdr ls0)))))))
(map-rec proc ls)))
The problem lays in cons (proc (car ls0))
. If I'm correct, when passing (1 2 3) (4 5 6)
to the ls
parameter the actual value of it will be ((1 2 3) (4 5 6))
. Therefore iter car ls0
in map-rec
will pass (1 2 3)
to iter
. Hence proc (car ls0)
in iter
will have the form: (car (car (1 2 3)))
, but this is impossible, right?
I know my thinking is flawed somewhere, but I can't figure out where.