哪些案例难以区分代码和数据?

时间:2017-03-17 10:22:47

标签: reflection rebol red homoiconicity

据说Rebol和Red中的代码是数据(反之亦然,即homoiconic)。 而且,据说不可能区分这两者。 我的理解是这里有2个案例:

  1. 从混合代码和数据确定确定 代码
  2. 从混合代码和数据确定确定 数据
  3. 代码和数据的混合是我的名字,外人通常称之为Rebol代码,经验丰富的Rebol程序员说是数据(没有代码,只有数据)

    动机

    代码与数据的区别使编程语言中的某些功能更容易。 对于例如提到了反汇编(sbcl具有disassemble函数)。

    问题

    这些有问题的案例有哪些例子?

    上下文:

    from chat on March 15, 2017 3:32 PM :(强调我的)

      
        

    Didec:你忘记了Redbol中没有代码,只有数据。

             

    Maximvl:嗯,对于CL和SBCL都是一样的,所有内容都符合本机代码,因为代码=数据,可以说没有数据,只有代码

      
         

    在Lisp语言中相同, 区分“代码”和“数据”[在Lisp中],因为代码必须以呼叫。 Redbol对代码没有这样的限制,这使得它非常不同。

    也:

      

    此外,上下文和动态绑定使其更加灵活,但与此同时,直接转换为低级汇编代码,就像在CL示例中一样,是不可能的

    旁白:这是否意味着Rebol比Lisp更加同源?

1 个答案:

答案 0 :(得分:1)

这是一个:

[q]

局外人会识别Q函数并将其视为代码块,而Rebol内部人员将知道它必须是数据,因为Q仅从解释器的顶层调用。