Итак, я пытаюсь увидеть, как работают функции, которые могут принимать любое количество аргументов?
Я попробовал это
(define (plus x . xs)
(if
(null? xs) x
(plus (+ x (car xs)) . (cdr xs))))
(plus 1 2 3 4)
Но похоже, что на самом деле он не применял cdrв хз, но проходя ((2 3 4)), когда я прошел через него в отладчике.Поэтому я попробовал это
(define (plus* x . xs)
(if
(null? xs) x
(let ((h (car xs))
(t (crd xs)))
(plus* (+ x h) . t))))
Думая: «ха, я бы хотел, чтобы вы сейчас передали cdr», но я получаю ошибку: «application: плохой синтаксис (недопустимое использование`. ')in: (plus * (+ xh). t) "
Что происходит?
(Я могу получить версию дополнения к работе, либо
(define (add . xs)
(foldl + 0 xs))
Или даже
(define (plus x . xs)
(if
(null? xs) x
(apply plus (cons (+ x (car xs)) (cdr xs)))))
Итак, сложение не проблема, как работает пунктир.)