Reflection 哪些情况使代码和数据难以区分?

Reflection 哪些情况使代码和数据难以区分?,reflection,rebol,red,homoiconicity,Reflection,Rebol,Red,Homoiconicity,据说代码是Rebol和红色的数据(反之亦然,即HOMOIGINAL)。 另外,据说这两者是无法区分的。 我的理解是,这里有两种情况: 从代码和数据的混合中确定代码 从代码和数据的混合中确定数据 代码和数据的混合是我的名字,外人通常称之为Rebol代码,有经验的Rebol程序员说是数据(没有代码,只有数据) 动机 代码与数据的区别使得编程语言中的一些特性更容易实现。 例如,提到了反汇编(sbcl具有反汇编功能) 问题: 这些有问题的案例有哪些 背景: :(我的重点) 迪迪克:你忘了Redbol中没

据说代码是Rebol和红色的数据(反之亦然,即HOMOIGINAL)。 另外,据说这两者是无法区分的。 我的理解是,这里有两种情况:

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

    动机 代码与数据的区别使得编程语言中的一些特性更容易实现。 例如,提到了反汇编(sbcl具有反汇编功能)

    问题: 这些有问题的案例有哪些

    背景: :(我的重点)

    迪迪克:你忘了Redbol中没有代码,只有数据

    Maximvl:CL和SBCL都是一样的,都遵循本机代码,因为代码=数据,所以可以说没有数据,只有代码

    这在Lisp语言中是不一样的,在Lisp语言中,“代码”和“数据”是有区别的,因为代码必须以调用开始。Redbol对代码没有这样的限制,这使得它非常不同

    此外:

    此外,上下文和动态绑定使它更加灵活,但同时,直接转换为低级汇编代码(如CL示例中所示)是不可能的


    旁白:这是否意味着Rebol比Lisp更具同音性?

    这里有一个:

    [q]
    

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

    您的理解是错误的,没有“代码和数据的混合”可以从中获取代码:它都是数据。这与(非类型化的)lambda演算中的情况相同,其中值是函数,例如true是
    \x\y->x
    ,false是
    \x\y->y
    ,如果是
    \bool\then\else->bool然后else
    等“这是否意味着Rebol比Lisp更具同源性”=>否。@Caleth你可以这么说,但有时区分是不是很有用或者,您可以从您的示例中说,它是所有代码/函数,没有数据:p某些内容是代码还是数据取决于上下文。有时,您可以锁定某个值的含义,但只能在上下文中锁定<代码>加载一个红色值文件,它只是数据<代码>执行相同的文件,红色将解释它。用另一个工具处理它,它的数据会再次出现。@GreggIrwin那么,如果有
    do
    reduce
    那么肯定是code?(又称案例1?)