(eval'(* ab))返回最终结果,而不是中间结果(* 2 3)

结石

SICP 4.1.3评估程序数据结构中,它指出:

用户的程序是评估者的数据并不一定会引起混淆。实际上,有时可以方便地忽略此区别,并通过使eval在程序中可用,使用户能够将数据对象显式评估为Lisp表达式许多Lisp方言提供了一个原始的评估过程,该过程将一个表达式和一个环境作为参数,并评估相对于该环境的表达式。

然后尝试

Chez Scheme Version 9.5
Copyright 1984-2017 Cisco Systems, Inc.

> (define a 5)
> (define b 6)
> (eval '(* a b))
30

我认为结果没有意义,因为它既有效又适用。

正如我从后续内容中学到的,我预测结果应该是

> (eval '(* a b))
  '(* (5 6))

然后将*应用于值列表(5 6)。

评估产生要应用的参数和过程的价值,而不是最终结果。

我对评估的理解错了吗?

除夕夜

基本上,(eval '(* a b))在引擎盖下发生的情况就是您所描述的。既然*是不是一种特殊形式或宏它评估为程序对象,然后将其评估ab它然后应用从评估得到的程序*与评估参数列表。它不会中途停止,因此您可以获得完整的评估。

也知道这*是一个变量。您可以*通过自己评估来查看其背后的过程它不会显示*

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

JavaScript递归返回中间结果,而不是最终结果

当我填写3个表单输入时,我的最终结果不会显示。但是当我填写3个输入中的2个时,结果会显示出来

在(python3)psycopg2以字符串而不是dict返回结果

print(eval("print(2+3)")) 打印 2 个不同的答案

拖放游戏只有两个最终结果,正确或错误的AS3

pandas/python:在 2 df 和输入最终结果到新 df 之间的搜索循环

eval(arguments.callee);的结果

存储过程返回2个结果集mybatis 3

如何比较2列并根据结果返回第3列?

Python:具有未定义变量的Eval(2 * x + x = 3 * x)

使用函数构造函数而不是eval()来评估AJAX结果

返回此|| (0,eval)('this');

从eval返回值

我的方法的最终结果不是结果,我想

Python Pandas:组合2个数据帧,其中一帧的列作为最终结果的索引

PHP eval无法产生预期的结果

strict.pm在(eval 1)第2行未返回真实值

如何使eval返回零而不是零?

1 + 2 - 3 * 4 / 5 的数学结果错误。得到 1 而不是 0.6

Jinja2模板中的“ eval”语句

eval(fn) 和 eval(arrowFn) 返回不同的值

结果在最终结果中返回未定义,但在axios请求中返回结果

ZipFile.testzip()在Python 2和Python 3上返回不同的结果

查找第 2、3、..n 次匹配并从最小到最大值返回排序结果?

如何使用promise返回数组的最终结果?

如何使用purrr获得R中的中间结果和最终结果

如何在面包屑中更改最终结果,以便在店面WooCommerce主题上使用子主题时显示为H2?

说 s1 和 s2“未使用计算值”,但我的最终结果是正确的。为什么?

为什么在clojure(eval(列表+ 1 2))和(eval(列表'+1 2))中做相同的事情?