Опитвам се да създам функция, наречена lcm-from-factors, която изчислява най-малкото общо кратно на две числа (m и n). Входящите данни за функцията са m-co-groups и n-co-groups, които изброяват всички прости фактори и техните правомощия. Например за m= 2970 и n= 163 800 ще имаме:
m-ко-групи= '((2 1) (3 3) (5 1) (7 0) (11 1) (13 0)) n-ко-групи= '((2 3) (3 2) ( 5 2) (7 1) (11 0) (13 1))
Те се връщат от функция, наречена кофактор, която ми беше дадена. Написах кода, но функцията не се компилира, защото смятам, че не съм внедрил правилно рекурсията. Ще се радвам на всякаква помощ, за да разбера какво правя погрешно. Моят код е както следва.
(define (lcm-from-factors m n)
(let-values (((m-co-groups n-co-groups) (co-factor m n)))
(define (recurse m-co-groups n-co-groups)
(let* ((a (first(m-co-groups)))
(b (first(n-co-groups))))
(cond ((>= (rest(a)) (rest(b)))
(+ (expt (first(a)) (rest(a))) (recurse (rest(m-co-groups)) (rest(n-co-groups)))))
(else (+ (expt (first(b)) (rest(b))) (recurse (rest(m-co-groups)) (rest(n-co-groups))))))))))
(co-factor m n)
трябва да се направи оценка на два списъка с процедури, тъй като прилагате елементи ((a)
и(b)
) и тези процедури трябва да произведат двойки, тъй като се опитвате даfirst
резултатите? - person Sylwester   schedule 10.02.2015(m-co-groups)
означава извикване наm-co-groups
като процедура. Ако това не е процедура, ще получите грешка. Нито една от променливите никога не трябва да се извиква като процедури. - person Sylwester   schedule 10.02.2015a
е(lambda () 10)
, тогава(a)
става 10. Акоa
е(2 1)
, получавате грешка, че(2 1)
не е процедура, тъй като всъщност извиквате('(2 1))
Предполагам, че губите много грешки, като премахвате излишните скоби. например(first m-co-groups)
вместо(first (m-co-groups))
, което би трябвало да изискваm-co-groups
да бъде процедура, както+
е . - person Sylwester   schedule 10.02.2015(recurse m-co-groups n-co-groups)
като последен израз вlet-values
. Можете да направите и двете в една форма с име let(let recurse ((m-co-groups m-co-groups) (n-co-groups n-co-groups) ... )
- person Sylwester   schedule 10.02.2015