我有一个任务在球拍中创建一个计算器。用户调用计算器,获得提示,输入构成过程名称的两个值,第三个值是传递给过程的值。它接受输入,然后它会抛出一个错误。我的意图是让计算器调用tom并将它从ui中获得的列表传递给它。 inchestofeet只是一个占位符,目前正在返回它传递的相同值。球拍输入帮助
(define(getInput prompt-string)(begin(display prompt-string)(read)))
(define(inchestofeet x)(x))
(define(ui)((list(getInput "1st part:")(getInput "2nd part:")) (getInput "value")))
(define(tom input-list)
((eval(list(string->symbol(string-append(symbol->string(car input-list)(symbol->string(car(cdr input-list))))))(caddr input-list)))))
(define(calculator)(tom(ui)))
错误:
应用:不是一个程序; 预期考虑到可以应用到参数的过程 :(英寸tofeet) 参数:
对于如何提示用户输入字符串并将该输入转换为过程调用,您有任何建议吗?在我们班,我们被评估为使用,而且我还没有找到任何其他有效的方法。 – Tom
那么,为了提示用户输入一个字符串,你可能想使用['read-line'](https://docs.racket-lang.org/reference/Byte_and_String_Input.html#%28def._%28%28quote ._〜23〜25kernel%29._read-line%29%29)像这样:'(define input(read-line))'。如果你想在调用它之前提示用户,那么你可以定义一个helper函数,比如'get-input',它可以执行'(begin(display prompt-string)(read-line))',然后使用'(define input (get-input prompt-string))'。 –
至于将输入转换为过程调用,我会做的是写一个注释记录哪些字符串意味着什么,然后使用'cond'(或'case','match'或其他分支形式)来基于它是哪个字符串来做不同的事情。 –