У меня есть следующие п-арной функции я определил:Схема - п-арной функции вычитания вопросы
(define (- . l)
(cond ((null? l) 0)
(else (b- (car l) (apply - (cdr l))))))
Он отлично работает для двух аргументов, но больше, и он начинает добавлять номера странным образом, и я не понимаю почему.
Кроме того, у меня есть чек реализован в другой версии этой функции в случае, если есть только один аргумент:
(define (- . l)
(cond ((null? (cdr l)) (b- (b* l 2) l))
(else (b- (car l) (apply - (cdr l))))))
Это второй один не работает вообще, когда я изменить первое условие. Input должно быть что-то вроде (- 10 6 1)
Помните, что вы не можете просто изменить порядок выполнения надстроек. Ваша функция вычисляет '10 - (6 - 1)' -> '5' вместо' (10 - 6) - 1' -> '3'. – jkiiski
Или, иначе говоря, '(- a b c)' is '(- a (+ b c))', а не '(- a (- b c))'. (И ваша вторая версия пытается mulitply и вычесть список, единственный аргумент - '(car l)'.) – molbdnilo