Common Lisp:编译与评估

2024-01-27

在带有 sbcl 的 Emacs + Slime 上,一旦我在文件中定义了一个函数(或多个),我有两个选择:

  • 评估: 例如与 C-M-x eval-defun
  • 汇编: 例如使用 C-c M-k 编译文件

第二个也生成一个 .fasl 文件。

两者有何区别?

当我编译定义/文件时,幕后发生了什么?

每一种的优点和缺点是什么?


首先有一个函数eval[1 http://www.lispworks.com/documentation/lw50/CLHS/Body/f_eval.htm],允许在语言运行时评估(即执行)任意 CL 形式。 CL 实现可能有 2 种不同的操作模式:编译模式和解释模式。编译模式意味着,在评估之前,首先在内存中编译表单。此外,在 CL 中,评估不是发生在文件级别,而是发生在单个表单级别。所以eval可以编译和解释表单,具体取决于操作模式。 (例如,SBCL 默认情况下始终编译,除非您通过设置指示它不要编译sb-ext:*evaluator-mode* to :interpret,而 CLISP 始终进行解释)。

现在还有一个方便的功能compile-file[2 http://www.lispworks.com/documentation/lw51/CLHS/Body/f_cmp_fi.htm] 允许编译某个文件中的所有表单并将结果保存在另一个文件中。这不触发评估这些形式。

CL还定义了程序生命周期的3个不同时间:编译时、加载时和执行时。并且有可能控制使用最神秘的 CL 特殊运算符之一时发生的情况eval-when[3 http://www.lispworks.com/documentation/lw50/CLHS/Body/s_eval_w.htm].

To sum up, C-M-x eval-defun will call eval on the form under cursor. It will not necessary compile it, but that is possible, depending on implementation. C-c M-k compile-file will compile-file your buffer, but not evaluate it's contents.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Common Lisp:编译与评估 的相关文章

  • 在 Python 中,部分函数应用(柯里化)与显式函数定义

    在 Python 中 以下方式是否被认为是更好的风格 根据更一般的 可能是内部使用的功能显式定义有用的功能 或者 使用偏函数应用来显式描述函数柯里化 我将通过一个人为的例子来解释我的问题 假设编写一个函数 sort by scoring 它
  • 如何从 SBCL 解释器将特定函数写入文件?

    假设我在没有 SLIME 的情况下玩过 SBCL 没有任何简单的解释器 现在我想将几个函数保存在一个文件中 不是核心图像 只是文本形式的一些代码 我该怎么做呢 有两种方法可以做到这一点 使用DRIBBLE and or FUNCTION L
  • Clojure 中的快速素数生成

    我一直在努力解决欧拉计划 https projecteuler netClojure 中的问题得到了改善 我已经遇到过几次素数生成问题 我的问题是它花费的时间太长了 我希望有人能帮助我找到一种有效的方法 以 Clojure 的方式做到这一点
  • 如何在 Ocaml 中表示一个简单的有限状态机?

    我用 C 和 Java 编写过一些状态机 但从未用过像 Ocaml 这样的函数式语言 问题是我不知道我是否可以从对象语言版本中调整代码 因为在 Ocaml 中记录和变体比类更强大 所以 我需要一个事件驱动的有限状态机 像 UML 中的分层结
  • Lisp:CHAR 既未声明也未绑定

    几天前我决定学习 通用 Lisp 我意识到这是一个相当新手的问题 对于至少有一点经验的人来说可能非常微不足道 所以基本上发生的事情是我加载 Emacs Slime 通过 Lisp in a Box 并编写我的程序 包括在下面 defun l
  • 我如何访问 Common lisp 中 Defclass 插槽的 :Documentation 字符串

    好的 这是我如何实例化 Defclass 以及相关的 Defmethod 和 Defparameter defvar account numbers 0 defclass bank account customer name initarg
  • 如何指定 sbcl(或 common lisp)向量中的元素类型?

    我尝试在 sbcl 1 1 14 中执行以下代码 但类型检查似乎忽略了向量元素的声明 defun test vec declare type vector integer vec format nil a elt vec 0 有什么提示吗
  • Common Lisp:循环列表中连续对的最佳方法是什么?

    有时我需要循环遍历列表中的连续对 我现在的做法是 loop for x on lst while not null cdr x do something on car x and cadr x 我想知道是否有更好的 内置的方法来做到这一点
  • 何时使用接口,何时使用高阶函数?

    给定一个具有以下层的 ASP NET MVC 应用程序 UI 视图 CSS Javascript 等 控制器 服务 包含业务逻辑和数据访问 没有单独的数据访问层的原因是我正在使用 SQL 类型提供程序 以下代码可能不起作用 因为它只是原始草
  • 一次性的 lisp 宏,我的实现正确吗?

    我正在尝试从 Peter Seibel 的书 Practical Common Lisp 中学习 Lisp 在第 8 章 宏 定义你自己的 http www gigamonkeys com book macros defining your
  • 计算二项式时“应用程序:不是过程”

    我正在定义一个函数binomial n k 又名帕斯卡三角形 但出现错误 application not a procedure expected a procedure that can be applied to arguments g
  • C# 中我们需要定点组合器吗?

    我在 C 中使用递归 lambda 并在网络上找到了两种执行此操作的方法 一种方法使用定点组合器 http en wikipedia org wiki Y combinator而另一个则没有 在下面的代码中 f1是使用组合器构建的 f2是直
  • 为什么解析器组合器“seq”用“bind”和“return”定义?

    我正在读这个article http eprints nottingham ac uk 237 1 monparsing pdf关于解析器组合器并且不理解以下内容 他们说使用seq 见下文 导致解析器将嵌套元组作为结果 操作起来很混乱 se
  • 关于执行令的问题

    我正在尝试学习 Common Lisp 并在 repl 中尝试某些东西时发现了一些意想不到的东西 对我来说 基于大多数编程语言的执行顺序 以及我一直从 lisp 听到的出色的一流函数支持 我认为以下应该可行 if t format t te
  • 在 Java 8 中使用映射函数时类型转换不起作用

    我正在比较两个列表 List allUserGroups UserBC getAllGroupsForUser userId deptID List
  • Scala 解析器组合器的运算符优先级

    我正在研究需要考虑运算符优先级的解析逻辑 我的需求并不太复杂 首先 我需要乘法和除法比加法和减法具有更高的优先级 例如 1 2 3 应视为 1 2 3 这是一个简单的例子 但你明白了 我需要将更多自定义标记添加到优先级逻辑中 我可以根据此处
  • 闭包作为数据合并习惯的解决方案

    我正在尝试解决闭包问题 而且我think我发现了一个案例 他们可能会有所帮助 我有以下几部分需要处理 一组正则表达式 旨在清理状态名称 位于函数中 具有州名称 上述函数创建的标准化形式 和州 ID 代码的 data frame 用于链接两者
  • 带有剩余参数的函数调用带有剩余参数的函数

    假设我们有一个函数func1 defun func1 rest values do something with values loop for i in values collect i 现在 我们有一个函数func2哪个调用func1
  • 如何识别 Java 中的不可变对象

    在我的代码中 我正在创建一个对象集合 这些对象将由各种线程以只有在对象不可变的情况下才安全的方式访问 当尝试将新对象插入到我的集合中时 我想测试它是否是不可变的 如果不是 我将抛出异常 我能做的一件事是检查一些众所周知的不可变类型 priv
  • OS X 的最佳方案或 LISP 实现是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在寻找一个 Scheme 甚至 LISP 的版本 我可以用它来恢复一些丢失的 Lisp 开发技能 一些网络功能固然很好 但不是必需的 我研究

随机推荐

  • 我可以在 robots.txt 中使用“Host”指令吗?

    Searching for specific information on the robots txt I stumbled upon a Yandex help page http help yandex com webmaster c
  • 为什么此保存方法不调整图像大小?

    我重写保存方法以便在上传后调整图像大小 以下代码似乎并未调整图像大小 我仔细检查了媒体文件夹 发现上传图像的原始尺寸 900x850 只有一份副本 Django 没有抛出任何错误 所以我不知道如何解决这个问题 需要明确的是 我可以毫无问题地
  • SQLAlchemy 自定义查询列

    我有一个如下定义的声明表 class Transaction Base tablename transactions id Column Integer primary key True account id Column Integer
  • Request.Url.Authority 未返回预期的域

    我正在网站的控制器中生成一封电子邮件 其中包含指向我的网站的链接 http Request Url Authority some page 当我在本地计算机上测试它时 这是有效的 返回localhost 12345 和生产中 返回www c
  • Angular 6 httpClient 使用凭据发布

    我有一些代码可以发布一些数据来创建数据记录 它在一个服务中 这是代码 import Injectable from angular core import HttpClient HttpHeaders from angular common
  • CakePHP 2.1 测量页面执行时间

    如何测量 CakePHP 2 1 中的页面执行时间 在 1 3 中 它在调试模式下呈现在代码中 你可以使用调试工具包插件 https github com cakephp debug kit找出执行时间 或者您可以在 app 中编辑 ind
  • 在 Windows 10 IoT 上使用 UWP 进行 LDAP 查询

    经过几个小时的搜索后 似乎无法从 UWP 应用程序查询本地 LDAP 目录 Microsoft Active Directory 或其他 这似乎是 UWP 产品中的一个相当奇怪的漏洞 因此我希望我只是错过了明显的漏洞 通用 Windows
  • 如何在构建的电子应用程序中获取开发工具?

    是否可以在构建的电子应用程序中显示开发工具 我使用构建的可执行文件electron packager与使用运行的应用程序的行为不同electron在命令行中 我无法看到抛出了哪些类型的异常 是的 可以在打包的应用程序中显示 DevTools
  • Android:单击时更改按钮颜色

    基本上 我正在尝试创建一个单击时的按钮 注意 NOT按下 会将颜色从 color1 更改为 color2 再次单击时 颜色将从 color2 变回 color1 我疯狂地搜索 我设法提取的唯一信息是如何在按下按钮时改变颜色 即当用户按住按钮
  • 将构造函数添加到 deftype 创建的类中

    为了与 Java 实现互操作性 我需要一个具有执行初始化的空构造函数的类 此类的对象需要具有类似于可变java字段的东西 即该对象代表游戏的后端 并且需要保持游戏状态 deftype 确实一切我想要做except提供一个无效构造函数 因为我
  • 如何检索高质量的指南针方向(如 Google 地图)?

    我发现的所有在 Android 中获取指南针方向的指南都有一个错误 当您以纵向模式握住手机并 看 地平线上方时 指南针箭头会从正确方向旋转 180 度 谷歌地图方向指示器不存在这个问题 谷歌地图的另一个好处是它们可以以某种方式估计指南针的准
  • Vue.js 对数组进行过滤

    我正在尝试使用 vue js 中的计算属性来过滤数组 我想搜索多个字段 名称 状态 标签等 My data events id 1 name Name of event url datetime 2017 05 10T00 00 00Z d
  • 不完整类型的静态字段 - 合法吗?

    在 C 中声明在类定义时不完整的类型的静态字段是否合法 例如 Foo h class Foo public private class Bar static Bar something Foo cpp class Foo Bar Foo B
  • 标准对 char 数组作为模板参数有何规定?

    在我研究答案的过程中这个问题 https stackoverflow com q 57003010 9883438我发现 我之前不知道 gcc 和 clang 允许char如果声明了数组 则它们将成为模板参数static 例如 此代码使用
  • 如何从 ruby​​ 中的反引号命令获取颜色?

    在 ruby 文件中 当我做system rspec file spec rb 我得到一个很好的彩色输出 当我这样做时 result rspec file spec rb puts result 我一点颜色都没有 有什么办法可以保留颜色 顺
  • 过滤文件内容到排序表

    我有一个包含以下代码行的文件 这里的文件显示了一个逐一排序的时间表 at 12 00 the schedule of james version1 is first task eating nothing second task rest
  • Visual Studio 2015(最新更新)发布功能无法编译 ASP.NET Core RC1 源

    几个月前 我开始开发一个新的 ASP NET Core RC1 项目 并使用 Visual Studio 2015 进行发布 生成一个文件夹树 无需项目 C 源代码即可部署 因为它正在将其编译到放入文件夹树的程序集中 现在我已经升级了 Vi
  • 如果 POJO 对象中的可变字段存储在并发HashMap 中,那么该字段是否是线程安全的?

    如果 POJO 对象中的可变字段存储在并发HashMap 中 那么该字段是否是线程安全的 或者我是否需要用锁保护字段或使它们不稳定以确保所有线程都能看到更新 将字段标记为易失性是否足以确保所有线程都能看到更新 如果存储在并发HashMap中
  • java.security.NoSuchAlgorithmException:算法 x25519 不可用

    我收到这段代码的 javax net ssl SSLException 连接重置 ReadableByteChannel rbc Channels newChannel url getInputStream 但仅当在使用 Open JDK
  • Common Lisp:编译与评估

    在带有 sbcl 的 Emacs Slime 上 一旦我在文件中定义了一个函数 或多个 我有两个选择 评估 例如与 C M x eval defun 汇编 例如使用 C c M k 编译文件 第二个也生成一个 fasl 文件 两者有何区别