Я бренд шлепает новую схему. В той мере, в какой сегодня вечером я когда-либо играл с ним в стороне от того, что объяснил мне класс слайдов PowerPoint в классе. Я должен написать программу схемы, которая принимает оператор ввода пользователя, а затем выполняет эту операцию над числами, которые следуют за ней. (другими словами, реализовать мою собственную версию схем, встроенных в операторы «+», «*» и т. д.). Уловка заключается в том, что я должен использовать рекурсию. Пытаясь маневрировать моим синтаксисом схемы, мне очень сложно понять, с чего начать.Я пытаюсь рекурсивно суммировать целые числа, введенные пользователем
Итак, я решил начать с кода, который, по крайней мере, рекурсивно суммирует значения, введенные пользователем (не беспокоясь о признании пользователя, вводящего оператор и круглые скобки). Я просто не могу понять, как заставить его работать. Вот что я хочу:
(define run (lambda (x)
(cond
((eqv? x "a") (display x))
(else (+ x (run(read))))
)))
(run (read))
условие, чтобы проверить, если х равен «а» был задуман как способ для меня, чтобы разорвать рекурсию прямо сейчас. В окончательной версии вход будет находиться между набором скобок, но я думал, что перейду через этот мост, когда приду к нему. В любом случае, код просто продолжает принимать входные данные и никогда не останавливается. Итак, условие отображения x никогда не получится, я думаю. Я знаю, что я, вероятно, все делаю неправильно, и я был бы очень признателен за некоторые указания.
EDIT: Хорошо, я хотя бы начинаю понимать, что что-то не имеет смысла. Например, мое отображение x фактически не даст сумму, так как я не храню сумму в x любым способом. Тем не менее, я до сих пор не понимаю, почему код, по крайней мере, не останавливается, когда я ввожу букву a.
EDIT 2: У меня есть это для работы, но только когда условие равно 1. Как я могу получить его, чтобы распознать ввод символа или лучше, но правильную круглую скобку, чтобы заставить его закончить рекурсию просто как это с 1? :
(define run (lambda (x)
(cond
((eq? x 1) 0)
(else (+ x (run(read))))
)))
(run (read))