我是计划的新手。今晚是我第一次玩它,除了在课堂上向我解释的幻灯片。我必须编写一个方案程序,该程序接受用户输入运算符,然后对它后面的数字执行该操作。(换句话说,实现我自己的方案版本,内置“+”、“*”等运算符)。问题是我必须使用递归。试图绕过这个方案语法让我很难弄清楚从哪里开始。
因此,我决定从一些至少递归总结用户输入的值的代码开始(不用担心识别用户输入了运算符和括号)。我只是无法弄清楚如何使它工作。这是我正在尝试的:
(define run (lambda (x)
(cond
((eqv? x "a") (display x) )
(else (+ x (run(read))))
)))
(run (read))
检查 x 是否等于“a”的条件旨在成为我现在打破递归的一种方式。在最终版本中,输入将在一组括号之间,但我想当我谈到它时我会越过那座桥。无论如何,代码只是不断地接受输入,并且永远不会停止。所以,我猜显示 x 的条件永远不会被调用。我知道我可能做错了一切,我真的很感激一些指示。
编辑:好的,我至少开始意识到有些事情没有意义。比如我显示的 x 实际上不会给出总和,因为我没有以任何方式将总和存储在 x 中。但是,我仍然不明白为什么当我输入字母 a 时代码至少没有停止。
编辑 2:我让它工作,但只有当条件等于 1 时。我怎样才能让它识别一个 char 的输入或更好的右括号,让它像它一样结束递归1?:
(define run (lambda (x)
(cond
((eq? x 1) 0)
(else (+ x (run(read))))
)))
(run (read))