Я не могу на всю жизнь узнать, почему этот код вызывает ошибку. Вот ошибка:Ошибка и ошибки
let*: bad syntax (missing body) in: (let* ((tempp2 (p2) (letrec ((mloop (p1 p2) (if (= (length p1) 0)) (else if ((= (length p2) 0) ((set! p2 (pn)) (multiloop (cdr p1) (p2)))) (else (let* ((prod (append (prod) (cons (* (coeff (car p1)) (coeff (car p2))) (+ (expon (car p1)) (expon (car p2)))))))) (set! p2 (cdr p2)) (mloop (p1 p2)) (simplify (sort newone))))))))))
Вот код:
(define multiplyPoly (lambda (p1 p2)
(
(let* ((hardp2 (p2)
(letrec
((mloop (p1 p2)
(if (= (length p1) 0))
(else if ((=(length p2) 0) ((set! p2 (hardp2)) (multiloop (cdr p1) (p2))))
(else
(let* ([prod (append (prod) (cons(*(coeff(car p1)) (coeff(car p2))) (+(expon(car p1)) (expon(car p2)))))]))
(set! p2 (cdr p2))
(mloop (p1 p2))
(simplify (sort newone)))))))))))))
Я плохо разбираюсь в общих примерах. У вас есть какие-то особенности? Почему считается, что нет тела? –
@ZackSchwartz Поскольку выражение 'let' содержит только привязку имени. Он также требует тела, которое является значением выражения. '(let ((x 5) (y 3)) (+ x y))' оценивается до 8, но '(let ((x 5) (y 3)))' недействительно. Кажется, вы пытаетесь написать C и рассматривать «let'-варианты как блоки объявления переменных. Это не так, как работает Scheme, и ваш лучший способ действий, вероятно, забыть то, что вы уже знаете о программировании, и начать переучивание, написав более мелкие программы Scheme, чем это. И не используйте 'set!'. – molbdnilo
Так как я могу объявить переменные? –