Я начинаю рисовать, и я пытаюсь изучить некоторую арифметическую рекурсию. Кажется, я не могу оборачивать голову, делая это с помощью схемы и получаю правильные результаты. В моем примере я пытаюсь создать целочисленный ключ для строки, выполнив арифметику для каждого символа в строке. В этом случае строка представляет собой список, такой как: '(h e l l o). Арифметику, которую мне нужно выполнить, - это:Арифметическая рекурсия
Для каждого символа в строке do -> (постоянная 33 + позиция буквы в алфавите) Где константа - это вход, а строка вводится как список.
До сих пор у меня есть это:
(define alphaTest
(lambda (x)
(cond ((eq? x 'a) 1)
((eq? x 'b) 2))))
(define test
(lambda (string constant)
(if (null? string) 1
(* (+ (* 33 constant) (alphaTest (car string))) (test (cdr string)))
Я пытаюсь проверить простую строку (тест «(а б) 2), но я не могу произвести правильный результат. Я понимаю, что моя рекурсия должна быть неправильной, но я много раз общался с ней и каждый раз нажимал на стену. Может ли кто-нибудь помочь в достижении этой арифметической рекурсии? Пожалуйста и спасибо. Имейте в виде, я любитель на Схеме языке :)
EDIT Я хотел бы постоянная, которая вводится для изменения через каждую итерацию строки, сделав новый постоянную = (+ (* 33 константы) (alphaTest (автомобильная строка))). Результат, который я ожидаю для входной строки '(ab) и константы 2, должен быть следующим:
1-я итерация' (a): (+ (* 33 2) (1)) = 67 sum = 67, постоянные становится 67
2nd итерации «(б): (+ (* 33) 67 (2)) = 2213 сум = 2213, константа становится 2213
(test '(a b) 2) => 2280
Вы описали, что делать с каждым символом строки, но не с тем, как объединить результаты для каждого символа, чтобы предоставить окончательное одиночное число. Кроме того, это поможет, если вы описали ожидаемый результат '(test '(# \ a # \ b) 2)' – GoZoner
Я обновил вопрос. Спасибо GoZoner. – Sixers17