【问题标题】:Which are the cases that make it hard to distinguish between code and data?哪些情况难以区分代码和数据?
【发布时间】:2017-08-08 20:37:48
【问题描述】:

据说代码是 Rebol 和 Red 中的数据(反之亦然,即同音符号)。 此外,据说无法区分两者。 我的理解是这里有两种情况:

  1. 从代码和数据的混合中确定确定 代码
  2. 从代码和数据的混合中确定确定性 数据

代码和数据的混合是我对外界通常所说的 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 所以如果有doreduce 那肯定是code 呢? (又名案例 1?)

标签: reflection rebol red homoiconicity


【解决方案1】:

这是一个:

[q]

外人会认出 Q 函数并将其视为代码块,而 Rebol 内人会知道它一定是数据,因为 Q 只是从解释器的顶层调用。

【讨论】:

    猜你喜欢
    • 2016-09-01
    • 2014-10-12
    • 2011-04-11
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 2015-03-05
    相关资源
    最近更新 更多