- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将承认我对Lisp的了解非常有限。但是,我对这种语言非常感兴趣,并计划在不久的将来开始认真学习它。我对这些问题的理解无疑是有缺陷的,因此,如果我直言不讳地说了什么,请发表评论并纠正我,而不是低估。
真正的同调和可自我修改的语言
我正在寻找同时支持同声性(代码与数据具有相同表示形式)和不受限制的自我修改(不受限制的意思是,您可以更改运行代码的每个方面,而不仅仅是发出新代码或更改功能)的编程语言示例指针/代理。)
到目前为止,我发现了三个符合此条件的示例:
(+ 1 2 3)
(eval '(+ 1 2 3))
(+ 1 2 3)
是原始代码,而在第二个版本中,它是数据。通过假设这个陈述的真实性,可以说Lisp甚至不是谐音的。在代码都是列表/树/ S表达式的意义上,代码具有与数据相同的表示形式。但是,您必须明确标记这些列表/树/ S表达式中的哪些是代码,哪些是我的数据,这一事实似乎表明Lisp毕竟不是同质的。表示形式极为相似,但是它们之间的细微差别有所不同,您实际上必须说是要处理代码还是要处理数据。这绝不是一件坏事(事实上,其他任何事情都是疯狂的),但它强调了Lisp和机器代码之间的区别。在机器代码中,您不必显式标记哪些数字是指令,哪些是指针以及哪些是数据。在实际需要解释之前,一切都只是一个数字,此时可能是其中任何一种。
'(+ 1 2 3)
'(+ 1 4 3)
eval
运行它。但是,当您执行此操作时,您只是在编译一些代码并运行它。您无需修改现有代码,而只是发出并运行新代码。即使使用不太方便的格式,C#仍可以使用表达式树做同样的事情(这是由于C#代码与其AST的表示形式不同,而Lisp是它自己的AST)。您是否可以实际获取整个源文件并在运行时开始修改整个源文件,而对源文件所做的更改会对程序行为产生实时影响?
最佳答案
In the first version
(+ 1 2 3)
is raw code, whereas in the second version it is data. By assuming the truth of this statement it can be argued that Lisp isn't even homiconic. The code has the same representation as data in the sense that they are both lists/trees/S-expressions. But the fact that you have to explicitly mark which of these lists/trees/S-expressions are code and which are data to me seems to say that Lisp is not homiconic after all.
(+ 1 2 3)
是数据,它被馈送到要执行的解释器,即被解释为代码。您必须将s表达式标记为特定上下文中的代码或数据这一事实并不会使Lisp具有非同质性。
(1 2 3)
是有效列表,但不是有效程序,因为整数不是函数。
foo(X, 1, bar)
,但是如果没有
foo
的定义,我们将无法执行它。另外,变量不能是谓词或事实的名称,因此
X.
永远不是有效的程序。]
[1]> (defun foo (x) (+ x 1))
FOO
[2]> (defun bar (x) (+ x 2))
BAR
[3]> (setf (symbol-function 'foo) #'bar)
#<FUNCTION BAR (X) (DECLARE (SYSTEM::IN-DEFUN BAR)) (BLOCK BAR (+ X 2))>
[4]> (foo 3)
5
[1]
处,我们将函数
foo
定义为add-1函数。在
[2]
处,我们将
bar
定义为add-2函数。在
[3]
,我们将
foo
重置为add-2函数。在
[4]
处,我们看到我们已经成功修改了
foo
。
关于assembly - Homoiconic和 “unrestricted”自修改代码+ Lisp真的是自修改的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8490616/
我正在尝试在两个表之间进行空间连接: 表 1:397265 个特征(在 geom 字段上有 gist 索引) 表 2:73 个特征(在 geom 字段上有 gist 索引) 表 1 和表 2 具有相同
我正在尝试在两个表之间进行空间连接: 表 1:397265 个特征(在 geom 字段上有 gist 索引) 表 2:73 个特征(在 geom 字段上有 gist 索引) 表 1 和表 2 具有相同
枚举类型的值是该类型的静态变量。 据我所知,变量是由引用变量引用的,但没有新的运算符来实例化枚举对象。但这就像初始化数组一样吗? 这是对还是错? 最佳答案 是的,枚举类型的文字是 public sta
我阅读了有关关闭 zsh 自动更正以完成命令的所有提示。但是,它们并没有完全发挥作用。我试过 DISABLE_CORRECTION="true", unsetopt correct, unsetopt
我知道这个问题是 answered before ,但给出的答案并不是完整的故事: 我进入了 Firefox 的 Options->Content 并删除了除德语/德国之外的所有语言,navigato
我知道用汇编语言编写任何内容或将汇编语言添加到任何程序都会损害其可移植性。但是,有多糟糕呢?我的意思是,现在基本上所有 PC 都是 x86 或 x64,对吧?那么,如果我将汇编嵌入到 C 程序中,为什
我正计划构建一个 Web 服务客户端,它始终检查数据库中的某些记录,并根据数据库内容的结果在每个时刻及时执行某些决策。 所以我在想,我怎样才能让客户端一直运行呢? 我唯一想到的就是无限循环。像这样的东
我无法获取小部件的实际背景颜色。在我的特殊情况下,我在使用 QTabWidget 中的小部件时遇到了问题。 这是在 Windows7 上。所以经典小部件有一些灰色背景,而选项卡中的小部件通常用白色背景
请不要将我指向How to wrap preference title?因为它不适用于(正如我评论的那样)您使用 @strings/ 的情况对 strings.xml 文件的引用。 如果你使用 and
情况如下: 已知hdfs是仅附加的(本身没有更新)。 配置单元将数据写入其位于hdfs中的仓库。 可以在配置单元中执行更新 这意味着写入了新数据,旧数据应该以某种方式标记为已弃用,然后在某个时间将其清
在javascript中删除cookies的方法是将过期日期设置为过去。现在这实际上并没有删除 cookie,至少在 Firefox 中是这样。这只是意味着 cookie 将在浏览器关闭时被删除。 这
我需要终止一个卡住的线程,我将 IsBackground 设置为 true 但它仍然存在。线程的属性: ThreadState = AbortRequested IsBackground = true
在逻辑中,以及在 *ahem* 正确设计的编程语言中,将 boolean 值与 true 进行比较总是多余的,即 a == True 应该简单地替换为 a 。 (类似地, a == False 由 n
我一直在努力寻找一个好的定义,并理解线程到底是什么。 看来我一定错过了一些明显的东西,但是每次我读到什么是线程时,它几乎是一个循环定义,la“线程是一个执行线程”或“一种划分运行任务的方法” ”。呃呃
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
是否可以在 MAC 上以真正的全屏模式运行 IntelliJ Idea? 没有工具栏、侧边栏、按钮,只有代码。 如果可以,请告诉我。 最佳答案 您可以通过禁用以下项目在 View 菜单中执行此操作:
考虑以下代码: case class Vector3(var x: Float, var y: Float, var z: Float) { def add(v: Vector3): Unit =
我试图确认这个说法是否属实: 模型包括: 持久层:本质上是 DAO + 表示表的类 + DTO 服务层:DAOS + 一些逻辑的组合 您能否也引用/支持您的回答?我相信我在Spring Framewo
给定代码: #include struct X {}; struct Y1: virtual X {}; struct Y2: virtual X {}; struct Y3: virtual X
从这个其他QUESTION他们谈论 Bjarne Stroustrup 是如何说的,就像比 int 窄的整数数据类型(例如 short)被提升为 int,float 被提升为 double。但是,与i
我是一名优秀的程序员,十分优秀!