scheme - 关于 eq 的 Scheme 和 R5RS 问题
问题描述
你能解释一下为什么第一个是假的,第二个是真的吗?
这是如何工作的?谢谢。
(eq? '(1 2 3) '(1 2 3)) ;False
(eq? '() '()) ;True
解决方案
只有一个空列表,因此所有引用该列表的用法都()
指向该列表,并且是eq?
针对其自身的。存储模型的方案规范描述说:
尽管如此,可以理解空列表不能重新分配,因为它是唯一的对象。
并且eqv?
(由eq?
描述引用)的规范说两个对象是等价的,如果
obj 1和obj 2都是空列表
但是,当您创建一个非空列表时,它每次都会创建一个新列表,eq?
即使它们包含相同的元素,它们也不会相互关联。
推荐阅读
- android - 清单文件中缺少 Cordova 相机权限
- node.js - 运行 node index.js 什么都不做
- android - 耳机按钮单击时应用程序崩溃
- rust - 使用 wasm-bindgen 时如何在 Rust 中存储全局状态?
- css - Material UI v1 - 设置表格列宽
- java - 第一次自动登录
- python - 测试字典键是否以字母结尾?
- c# - 如何在 c# MVC Entity Framework 中处理多个提交按钮和复选框?
- node.js - node, express - 监听远程浏览器重新加载
- postgresql - Postgresql pg_dump 将公共添加到所有模式名称