I'm using LISP for several months. I know that Scheme is very similar to LISP, but I cannot understand the following Scheme functions. I read somewhere on the internet that "let loop" is used to create a recursive functions, but its argument "let loop ((x x))" doesn't make sense to me. Could you please explain and convert one function from scheme to LISP? Thank you so much for your help.
(define (remove x xs)
(let loop ((xs xs) (zs '()))
(cond ((null? xs) (reverse zs))
((equal? (car xs) x) (loop (cdr xs) zs))
(else (loop (cdr xs) (cons (car xs) zs))))))
(define (min es t r)
(let loop ((es es) (min-e nil) (min-c nil))
(cond ((null? es) min-e)
((or (and (member (cadar es) r) (member (caddar es) r))
(and (member (cadar es) t) (member (caddar es) t)))
(loop (cdr es) min-e min-c))
((or (not min-c) (< (caar es) min-c))
(loop (cdr es) (car es) (caar es)))
(else (loop (cdr es) min-e min-c)))))