Стереть ))
после #f
.Добавьте ))
после len1 len2)
, и оно будет работать.(не совсем, но близко (*) )
#f
самооценка, вам не нужно его цитировать.Сделайте отступ в форме (foldl ...)
, которая стала частью выражения if
.
Наконец, (if (not A) #f B)
- это то же самое, что (if A B #f)
- это то же самое, что и (and A B)
.
Вы правильно убедились, что длины обоих списков,переносимый (sic) и ожидаемый, равны.Я не понимаю, почему списки сами должны быть равными.Насколько я могу судить, они не должны этого делать.
(weighted-sum list-of-weights)
создает процедуру, ожидающую, что список чисел вычислит свою взвешенную сумму с использованием ранее предоставленных весов.
(*) Исправленный код после нескольких исправлений:
(define (weighted-sum . ws)
(define (sub . vs)
(let ((len1 (length ws)) (len2 (length vs)))
(and (equal? len1 len2)
(foldl
(lambda (i j res) (+ res (* i j)))
0
ws vs))))
sub)
Настоятельно рекомендуется установить, например, Racket и использовать его редактор для просмотра и исправления несоответствия скобок и т. Д.