Sharpsign 等号阅读器宏的示例?

2024-01-09

我见过这个使用过一次,但无法理解它的作用。参考文献说它是

#n=object读取为以 object 作为其打印表示的任何对象。 然而,该对象被标记为 n,这是必需的 无符号十进制整数,可通过语法 #n# 进行参考。 标签的范围是最外层正在读取的表达式 打电话来阅读;在此表达式中,可能不会出现相同的标签 两次。

对我来说,这只是随机选择的 56 个英语单词……您能举个例子说明何时可以使用它吗?


在 Common Lisp 中,它由阅读器和打印机使用。

通过这种方式,您可以在某些 s 表达式中标记对象,并在 s 表达式中的不同位置引用它。

标签是#someinteger=后跟一个 s 表达式。该整数必须是唯一的。您不能在单个 s 表达式中使用该标签两次。

对标签的引用是#someinteger#。该整数标识要引用的 s 表达式。必须先引入标签,然后才能引用它。该引用可以在 s 表达式中多次使用。

例如,这用于读取和打印具有共享数据对象的循环列表或数据结构。

这是一个简单的例子:

? '(#1=(1 . 2) (#1#))

reads as

((1 . 2) ((1 . 2)))

还要注意这一点:

? (eq (first *) (first (second *)))
T

这是一个相同的缺点单元格。

让我们尝试一下循环列表.

确保打印机处理循环列表并且不会永远打印它们......

? (setf *print-circle* t)
T

现在我们正在构建一个列表:

? (setf l1 (list 1 2 3))
(1 2 3)

我们将最后一个 cdr 设置为第一个 cons:

? (setf (cdr (last l1)) l1)
#1=(1 2 3 . #1#)

正如您在上面看到的,打印的列表有一个标签,最后一个 cdr 是对该标签的引用。

我们也可以使用相同的符号直接输入循环列表。读者这样理解:

? '#1=(1 2 3 . #1#)
#1=(1 2 3 . #1#)

由于我们已经告诉打印机处理此类结构,因此我们可以尝试第一个示例中的表达式:

? '(#1=(1 . 2) (#1#))
(#1=(1 . 2) (#1#))

现在打印机检测到有两个对同一个 cons 对象的引用。

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

Sharpsign 等号阅读器宏的示例? 的相关文章

  • 如何使用 Common Lisp 获得列表的所有可能排列?

    我正在尝试编写一个 Common Lisp 函数 该函数将给出列表的所有可能排列 每个元素仅使用一次 例如 列表 1 2 3 将给出输出 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 我已经写过一些有用的东西 但它
  • 阅读宏:你用它们做什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Common Lisp 重新启动到条件绑定

    我在空闲时间学习 Common Lisp 并对条件系统有疑问 当我们在 common lisp 中处理错误时 我们在处理程序中指定错误类型来确定要处理哪个错误 在引发和处理错误之间 我可以进行一些重新启动 例如使用 restart case
  • Common Lisp 中的属性列表是否引用某些全局状态?

    下面的代码有z作为局部变量 但它的行为就像全局变量一样 defun foo m let z stuff nil push m getf z stuff print z foo 1 foo 2 foo 3 我希望输出是 STUFF 1 STU
  • 如何在类Unix操作系统下方便的运行SBCL代码?

    David James 写了问题和答案 我将对其进行编辑以符合 Stackoverflow 标准 使用 SBCL 您可以将 Lisp 代码编译为机器代码 像 Java net C 甚至 C 一样 您将需要运行时 所以有两种方法来编译 Com
  • 了解 LISP 中的绑定变量和自由变量

    我正在阅读SICP 又出现了绑定变量和自由变量的话题 然而 我对此感到困惑 术语 绑定变量 仅适用于形式参数变量吗 此外 文本还指出过程定义 绑定 其形式参数 这让我感到困惑 因为有些人说我们将值 绑定 到变量 显然 当我们谈论不同类型的变
  • Common Lisp 中的 LET 与 LET*

    我理解 LET 和 LET 并行绑定与顺序绑定 之间的区别 并且作为理论上的问题 它非常有意义 但有没有什么情况你曾经真正需要过 LET 在我最近查看的所有 Lisp 代码中 您可以将每个 LET 替换为 LET 而无需进行任何更改 编辑
  • C# 中的通用 Func<> 类型

    我正在用 C 编写一个小型 Lisp 解释器 它基本上已经可以工作了 目前我正在使用一个接口来表示函数 public interface LispFunction object Apply ArrayList parameters 该接口由
  • Common Lisp 中的(随机)不那么随机?

    好的 最后一个问题 我将用 Common Lisp 完成我的猜数游戏 D 每当游戏开始 或者在第一个游戏之后开始新游戏 时 都会调用以下函数 Play the game defun play If it s their first time
  • Lisp 中的数组与列表:为什么下面的代码中的列表要快得多?

    我在解决时得到了意想不到的结果欧拉计划中的问题 75 https projecteuler net problem 75 我的代码确实找到了正确的解决方案 但它的行为很奇怪 我的解决方案包括遍历毕达哥拉斯树 巴宁矩阵 https en wi
  • 在 Parenscript 中使用 regex(正则表达式)

    我正在尝试 Parenscript 在尝试使用正则表达式函数时 我得到了意外的输出 例如 参考手册 https common lisp net project parenscript reference html shows regex f
  • 在 Lisp 解释过程中,“读者”的任务是什么?

    我想知道 读者 在解释 编译 Lisp 程序期间的目的 或者更准确地说 是 读者 的任务 从我刚刚完成的问题前研究来看 在我看来 读者 特别是本例中的 Clojure 可以被视为 语法预处理器 它的主要职责是读取器宏和原始形式的扩展 所以
  • 如何定义和使用 Common Lisp 包(库)?

    我在几个 Lisp 源文件中开发了一些 Common Lisp 函数 我希望这些函数可以轻松地供我编写的其他函数使用 或者如果我认为它们对其他人有用的话 可以在 github 上提供 现在 我只是将它们放在一些预定义的文件夹中并使用 req
  • 用通用函数替换普通函数

    我想将 elt nth 和 mapcar 等名称与我正在原型设计的新数据结构一起使用 但这些名称指定普通函数 因此我认为需要将其重新定义为通用函数 重新定义这些名称可能是一种不好的形式 有没有办法告诉 defgeneric 不要生成程序错误
  • 有没有一种简单的方法可以使用 Common Lisp 中的 Python 库?

    在编写 Common Lisp 代码时我真正怀念的一件事是访问 Python 库 包括标准库和第三方模块 CLPython 提供了 Python 功能的有限子集 这阻止了大多数库的使用 因此这对我来说并不是很有用 我希望能够从 Common
  • 在Emacs中,这个错误是什么意思? “警告:运行时需要 cl 包”

    我正在字节编译一个模块 它给了我这个警告 Warning cl package required at runtime 为什么这是一个警告 我很清楚我正在使用cl包裹 事实上有一个 require cl 模块中的语句 使用有什么问题吗cl
  • 在我的 Linux 机器上安装 lisp

    我使用 Vim 作为我的编辑器 Practical common Lisp 建议安装 Lispbox 我不知道如何使用 emacs 不知道如何用那个 T T 运行 lisp 代码 之后我找到了一个名为 limp vim 的 vim lisp
  • 为什么在 emacs-lisp 中的函数参数之前使用#'?

    我熟悉 Emacs Lisp 但不熟悉 Common 或任何其他 Lisp 一些 Lisp 程序员建议 例如emacs 的基本功能 https stackoverflow com questions 17076646 a basic fun
  • 从when语句内的函数返回

    我想做的就是使用 when 语句返回一个值 我想要以下功能 if x return y 我正在尝试使用 when x y 但是when语句并没有以退出函数并返回y的方式进行计算 它只是愉快地继续下一行 有没有办法做到这一点而不需要制作一个看
  • 从 CCL 检索(加载)源代码?

    我打了电话 load code lisp 用CCL 然后不小心删除了code lisp 有什么办法可以找回源代码吗 CCL 在内存中是否有它 这是一个非常特殊的功能 这里只为克洛祖尔CL 该代码在其他地方不起作用 这在 CCL IDE 中对

随机推荐

  • 如何在 TestSwarm 中添加项目并创建作业

    我正在尝试设置 TestSwarm 但无法创建项目和作业 当从 github 克隆 TestSwarm 时 一些文件丢失 例如 run 等 请提出您的想法 您使用创建一个项目 php scripts manageProject php cr
  • 什么是路径数据属性的 M 、 L 、 XAML

    我正在寻找一个内部 Silverlight 控件来对其进行一些更改 我看到类似的内容
  • 如何为 Azure 容器实例设置 FQDN

    我正在使用 Azure 容器注册表来存储我的私有 docker 映像Azure 容器实例来部署它 我获得了一个公共 IP 地址 可以用于验证和简单预览 但无法使用 或无法与客户共享 因为 IP 地址是动态的 有没有办法设置我可以使用的完全限
  • 测试 Rails 中是否有一个关系已更改

    是否可以有一个 before save 回调来检测 has one 关系是否已更改 关系not关系结束时的模型 例如 行为如下 person picture picture person picture changed true perso
  • flutter_bloc的BlocBuilder可以避免重建部分不改变的Widget吗?

    BlocBuilder of flutter bloc https pub dev packages flutter bloc是将页面的所有状态放在一起 有一个案例pulling a list有 2 个数据 isPullingState d
  • 是否有任何免费的 .NET OCR 库可以直接在应用程序窗口上执行 OCR?

    我正在寻找一个免费的 NET OCR 库 它能够对给定的应用程序窗口甚至内存中的图像进行 OCR 我可以自己拍摄应用程序窗口的快照 我看过tessnet2 http pixel technology com freeware tessnet
  • 使用 Selenium for Python 编写和发送 Gmail

    我刚刚开始第一次在 Python 中使用 selenium 在学习了快速教程后 我现在尝试用它制作一个程序 该程序将登录 Gmail 然后将电子邮件发送到选定的电子邮件地址 我已经完成了登录部分 但在撰写新电子邮件部分时遇到了一些问题 仅在
  • 使用 Delphi 的 oData 服务

    如何使用 Delphi 中的 oData Web 服务 我正在尝试与新的 Bing 搜索 Azure API 进行交互 Delphi 中几乎没有关于这样做的信息 有一个帖子here https stackoverflow com quest
  • 将 ormlite-4.9 与 sqlcipher-2.08 集成

    我正在将 ormlite 4 9 与 sqlcipher 2 08 集成 我用谷歌搜索了一下 但没有成功 我也看到了格雷先生的回答 如何在 Android 中将 ORMLite 与 SQLCipher 一起使用 https stackove
  • Django - 从外键获取数据

    我正在开发一个 Django 项目 并尝试为我的数据创建一些链接模型 我认为这些模型正在工作 但我似乎无法弄清楚如何访问链接数据 class One models Model name models CharField max length
  • 是否可以让某人成为已推送到 GitHub 的过去提交的共同作者?

    标题完美地概括了它 我在 GitHub 主分支上有一些提交 我也想添加一个共同作者 我尝试使用git amend并以正确的语法将电子邮件和名称添加到提交中 但它不起作用 文本本身只是显示出来 我不确定这是否是因为我的语法错误或者它根本不起作
  • javax.el.E​​LException:在 com.example.Bean 类型上读取“foo”时出错

    我在读以下教程 https oxygen informatik tu cottbus de webeng JavaJpaJsfApp minimal tutorial html h dataTable value 中使用的表达式通常指定一个
  • 多线程套接字连接/队列

    SocketClientThread 参考 http eli thegreenplace net 2011 05 18 code sample socket client thread in python http eli thegreen
  • 如何使用 Symfony 和 Jquery 发出 POST Ajax 请求

    我需要在我的 symfony 项目中存储一些地图参数 为此我需要在我的视图中实现一些 Ajax 它将能够将一些信息传递给控制器 我阅读了文档 尝试编写一些代码 但我无法使其工作 而且 Ajax 调试起来确实很痛苦 这是控制器部分 Route
  • dataType 与接受 - Ajax 请求

    我试图理解 Ajax 请求中的 Accept 和 dataType 之间的区别 文件指出 文档 http api jquery com jquery ajax 接受 默认值 取决于数据类型 类型 普通对象 请求标头中发送的内容类型 告诉服务
  • VS 2012 SSDT 构建 CLR,IEnumerable 生成的语法失败

    我正在尝试重用找到的一些代码here http www pawlowski cz 2010 09 sql server 2005 and sql server 2008 regular expressions and pattern mat
  • 在 R 中绘制多元逻辑回归模型的结果

    我想绘制针对调整后的特定自变量 即独立于模型中包含的混杂因素 与结果 二元 关系的多元逻辑回归分析 GLM 的结果 我看过推荐使用以下方法的帖子predict命令后跟curve 这是一个例子 x lt data frame binary o
  • 如何使用实体框架 6 执行全文搜索

    我有疑问 var query DataContext Fotos Where x gt x Pesquisa Contais myTerm 生成的SQL是 SELECT FROM Fotos AS Extent1 WHERE Extent1
  • 在 WebClient 中接受 Cookie?

    我刚刚开始尝试 C WebClient 我所拥有的是下面的代码 它从网站获取 html 代码并将其写入 txt 文件中 我遇到的唯一问题是 某些网站要求您在使用该网站之前接受 cookie 这导致的原因是它没有将真正的网站 html 代码写
  • Sharpsign 等号阅读器宏的示例?

    我见过这个使用过一次 但无法理解它的作用 参考文献说它是 n object读取为以 object 作为其打印表示的任何对象 然而 该对象被标记为 n 这是必需的 无符号十进制整数 可通过语法 n 进行参考 标签的范围是最外层正在读取的表达式