У меня есть следующая функция, чтобы проверить, является ли положительное значение четным.Значение проверки схемы, если даже не
(define (even? n)
(cond
((= n 0) #t)
((< n 0) #f)
(else (even? (- n 2)))
)
)
Я пытаюсь использовать эту функцию для увеличения магазина счетчика, когда проверяются значение не четное (нечетное), используя как even?
функции и логическую not
, но я не могу показаться, чтобы выяснить, правильно синтаксис.
(define (function a b)
(define (iter a b store)
(cond
((= b 1) (+ store a)
(else
(iter (double a) (halve b) (if (not (even? b)) (+ a store) store)))
)
)
(iter a b 0)
)
Может ли кто-нибудь проверить мой синтаксис, чтобы увидеть, что я делаю неправильно?
Вызов (function 1 1)
должен возвращать 1
Вызов (fucntion 1960 56)
должен возвращать 109760, но я получаю 141120
EDIT: Я понимаю, что мой halve
Funciton должен быть impromperly определен. Я попытался реализовать функцию сокращения пополам, которая использовала только вычитание.
(define (halve n)
(define (iter src store)
(cond
((<= src 0) store)
(else (iter (- src 2) (+ store 1)))
)
)
(iter n 0)
)
Ваш первый случай в 'iter' возвращает' store', если 'b' равно 1 (что в вашем примере оно), поэтому оно возвращает 0; вы даже не добираетесь до использования 'even?'. –
@ScottHunter Я обновил базовый футляр, потому что вы были правы. Тем не менее, я все еще получаю проблемы с большими номерами. – user3277752