【发布时间】:2016-07-28 22:55:27
【问题描述】:
我有一个带有一些值(list 'foo 'bar 2 #t 42 9 2 'some) 的球拍列表。实际上,这些值遵循一些更具体的模式,但对于这个问题,这是无关紧要的。我想测试列表中是否有两个相同的值,在本例中为数字 2,并获取元素和其他元素。这是我的尝试:
#lang racket
(match (list 'foo 'bar 2 #t 42 9 2 'some)
[(list-no-order a a rest ...)
"Do some stuff"]
[_ "Do some other stuff"])
模式是(list-no-order a a rest ...)。但是程序的解释失败了:
a11: unbound identifier;
also, no #%top syntax transformer is bound in: a11
在我看来,转换宏时出现错误。如果将list-no-order 更改为list,则该模式有效,但当然前提是元素位于列表的开头。
我的模式是否错误,如果是,如何纠正它,或者预期的模式是不可能的,解决它的最佳方法是什么?
【问题讨论】:
-
这是
(match (list 2 2 #t) [(list-no-order asd asd dsa) "Do some stuff"])宏扩展后的结果:pastebin.com/K3PG44kY。我们可以看到有一个未绑定的 idasd8。也许宏有问题? -
报告于Github。
-
感谢您将此作为错误报告提交。 :)
标签: pattern-matching racket equality