Lisp是REPL的唯一语言吗?
|
除了Lisp(红宝石,斯卡拉)以外,还有其他语言说它们使用REPL(读,评估,打印,循环),但是目前还不清楚REPL的含义是否与Lisp相同。 Lisp REPL与非Lisp REPL有何不同?
没有找到相关结果
已邀请:
7 个回复
蕉衫
不读取命令,REPL不执行命令。 “ 0”以s表达式格式读取输入数据并将其转换为内部数据。因此,“ 0”函数可以读取所有类型的s表达式-而不仅仅是Lisp代码。 READ读取一个S表达式。这是一种数据格式,也支持编码源代码。 READ返回Lisp数据。 EVAL以Lisp数据的形式获取Lisp源代码并对其进行评估。可能会发生副作用,并且EVAL返回一个或多个值。没有定义如何使用解释器或编译器实现EVAL。实现使用不同的策略。 PRINT获取Lisp数据并将其作为s表达式打印到输出流。 LOOP只是在此循环。在现实生活中,REPL更为复杂,并且包括错误处理和子循环,即所谓的中断循环。在发生错误的情况下,如果发生错误,则仅获取具有附加调试命令的另一个REPL。一次迭代中产生的值也可以重新用作下一次评估的输入。 由于Lisp都使用数据编码和功能元素,因此与其他编程语言略有不同。 相似的语言也将提供相似的交互界面。例如,Smalltalk还允许交互式执行,但它不像Lisp那样对I / O使用数据格式。对于任何Ruby / Python / ...交互式界面都相同。 题: 那么,阅读,评估和打印其价值的原始思想有多重要?与其他语言相比,这是否重要:读取文本,解析文本,执行文本,选择打印某些内容以及选择打印返回值?通常,返回值并未真正使用。 因此,有两个可能的答案: Lisp REPL与大多数其他文本交互界面不同,因为它基于s表达式的数据I / O并对其进行评估。 REPL是一个通用术语,描述了与编程语言实现或其子集相关的文本交互界面。 Lisp中的REPL 在实际的实现中,Lisp REPL具有复杂的实现并提供许多服务,直到输入和输出对象的可单击的表示形式(符号,CLIM,SLIME)。例如,高级REPL实现可在SLIME(Common Lisp的一种流行的基于Emacs的IDE),McLIM,LispWorks和Allegro CL中获得。 Lisp REPL交互的示例: 产品和价格清单:
订单,产品清单和金额:
订单价格
是包含最后一个REPL值的变量。它不包含此值作为字符串,而是实际的实际数据。
但是您也可以计算Lisp代码: 让我们来看一个函数,将两个参数的平方相加:
第四个元素只是算术表达式。
是最后一个值:
现在我们在其周围添加一些代码,以将变量
和
绑定到一些数字。我们正在使用Lisp函数ѭ12create创建一个新列表。
然后,我们评估以上表达式。同样,
是最后一个值。
每次ѭ16互动时,都会更新几个变量。先前的值示例为
,
和
。前一个输入也有
。这些变量的值不是字符串,而是数据对象。
将包含REPL读操作的最后结果。例: 变量
的值是多少?
让我们看看如何读取和打印列表:
现在,将上面的符号
设置为3。
指的是第二个先前输入的读取数据。
设置符号值。
然后上面的列表以不同的方式打印。
表示第二个先前的结果-数据,而不是文本。
疏腔傻小雹
田损比报
这是REPL循环的两个实际的Forth实现。我在这里什么都没留下-这是这些循环的完整代码。
Lisp和Forth做的事情完全不同,特别是在EVAL部分,但在PRINT部分。但是,他们共享一个事实,两种语言的程序都是通过将其源代码提供给各自的循环来运行的,并且在两种情况下,代码都只是数据(尽管在Forth情况下,它更像是数据也在代码中)。 我怀疑有人说只有LISP具有REPL的原因是READ循环读取了由EVAL解析的DATA,并且由于CODE也是DATA而创建了一个程序。关于Lisp和其他语言之间的区别,这种区别在很多方面都很有趣,但是就REPL而言,这一点都没有关系。 让我们从外部考虑一下: READ-从stdin返回输入 EVAL-将所述输入作为语言中的表达式进行处理 打印-打印EVAL \的结果 循环-返回读取 如果不讨论实现细节,就无法将Lisp REPL与Ruby REPL区分开。作为功能,它们是相同的。
磐去裸猜饲
刷骸码
诉嘎归亮
垫歌蝎降凤