【发布时间】:2017-08-08 20:37:48
【问题描述】:
据说代码是 Rebol 和 Red 中的数据(反之亦然,即同音符号)。 此外,据说无法区分两者。 我的理解是这里有两种情况:
- 从代码和数据的混合中确定确定 代码
- 从代码和数据的混合中确定确定性 数据
代码和数据的混合是我对外界通常所说的 Rebol 代码的称呼,而经验丰富的 Rebol 程序员说的是数据(没有代码,只有数据)
动机
代码与数据的区别使编程语言中的某些功能更容易。
例如提到了反汇编(sbcl 有disassemble 函数)。
问题
这些有问题的案例有哪些例子?
上下文:
from chat on March 15, 2017 3:32 PM:(强调我的)
Didec:你忘了 Redbol 中没有代码,只有数据。
Maximvl:嗯,CL 和 SBCL 都是一样的,所有内容都符合本机代码,因为代码 = 数据,可以说没有数据,只有代码
在 Lisp 语言中不相同,“代码”和“数据”[在 Lisp 中] 之间存在区别,因为代码必须以打电话。 Redbol 对代码没有这样的限制,这使得它非常不同。
还有:
此外,上下文和动态绑定使其更加灵活,但同时,不可能像在您的 CL 示例中那样直接转换为低级汇编代码。
旁白:这是否意味着 Rebol 比 Lisp 更具有同义性?
【问题讨论】:
-
你的理解是错误的,没有“代码和数据的混合”可以从中获取代码:都是数据。这与(无类型的)lambda 演算中的值相同,其中值是函数,例如true 是
\x \y -> x,false 是\x \y -> y,if 是\bool \then \else -> bool then else等等 -
"这是否意味着 Rebol 比 Lisp 更谐音" => 不。
-
@Caleth 你可以这么说,但有时区分是不是很有用? ;) 或者你可以从你的例子中说它是所有代码/函数,没有数据:p
-
是代码还是数据取决于上下文。有时您可以锁定一个值的含义,但仅限于上下文。
Load一个红色值文件,它只是数据。Do同一个文件,Red 会解释它。用另一个工具处理它,它又是数据。 -
@GreggIrwin 所以如果有
do或reduce那肯定是code 呢? (又名案例 1?)
标签: reflection rebol red homoiconicity