用户输入如何在Java中创建函数Repl
这是Peter Norvig的repl函数:
def repl(prompt='lis.py> '):
"A prompt-read-eval-print loop."
while True:
val = eval(parse(raw_input(prompt)))
if val is not None:
print(schemestr(val))
def schemestr(exp):
"Convert a Python object back into a Scheme-readable string."
if isinstance(exp, List):
return '(' + ' '.join(map(schemestr, exp)) + ')'
else:
return str(exp)
有效的方法是:
>>> repl()
lis.py> (define r 10)
lis.py> (* pi (* r r))
314.159265359
lis.py> (if (> (* 11 11) 120) (* 7 6) oops)
42
lis.py>
我试图用Java编写具有相同功能的程序,尝试了Java文档中的类,但没有一个能像这样工作;有什么想法吗?谢谢
# 1 楼答案
REPL之所以被称为REPL,是因为它是一个Loop,它Reads和E评估代码并p打印结果。在Lisp中,代码字面上是:
在非结构化语言中,它可能类似于:
这就是这个名字的来源
在Java中,它可能类似于:
但是,在Java或JRE中没有对应于
READ
或EVAL
的方法。你必须自己写read
、eval
和Code
。注意read
本质上是Java的解析器,eval
是Java的解释器。Java语言规范中描述了Java的语法和语义,您只需阅读JLS并实现这两种方法