scheme - Guile 方案中的点列表
问题描述
如何专门检查(a . b)
Guile 形式的点列表?的dotted-list
srfi-1 奇怪地返回 #t 也为例如数字(从什么时候数字列表呢?https ://www.gnu.org/software/guile/manual/html_node/SRFI_002d1-Predicates.html )!并且pair?
对于普通列表也将评估为#t。有没有办法将(a . b)
构造与其他事物区分开来,而b
部件(cdr)本身可以是任何对象,包括其他关联列表等?
这是我没想到也无法理解的:
(dotted-list? '(c . ((d . 3)
(e . 4)))) ; ===> #f
(dotted-list? 3) ; ===> #t
解决方案
请注意,这(atom . (x1 ... xn))
是另一种写法(atom x1 ... xn)
,所以(c . ((d . 3) (e . 4)))
就相当于(c (d . 3) (e . 4))
which 只不过是一个三元素列表(因此dotted-list?
在这种情况下返回 false)。
如果您不喜欢dotted-list?
srf-1 中给出的定义,请定义您自己的版本:
(define (my-dotted-list? l)
(and (dotted-list? l)
(pair? l)))
推荐阅读
- php - 如何从 Laravel 中的 select() 方法中替换值
- azure-blob-storage - azure Blob REST API 使用带有 SASkey 的 Curl 将数据从 RemoteServer 移动到存储帐户
- .net - 使用内存流进行大量序列化时如何解决内存问题
- php - 在 Laravel 中使用 redis 作为队列驱动程序的作业失败表
- java - 如何对 KTable (Kafka) 中的值求和
- python - 如何删除标签 Python
- javascript - 我能否澄清一下全局范围、全局对象、全局对象和全局变量的术语?
- flutter - 接收方:空 E/颤振(4835):尝试调用:[](“数据”)
- java - 在 weblogic 12C 本地服务器上部署的 Eclipse 和 Java 配置不起作用
- python - 从 VBA 运行 Python 脚本,不工作