【发布时间】:2020-10-11 18:01:21
【问题描述】:
在球拍中使用生成器和模式匹配我在练习懒惰地解构集合时遇到了以下错误,我无法弄清楚错误是什么,也不知道为什么会发生。
(require racket/match)
(require racket/generator)
(require data/collection)
(sequence->list
(in-generator
(let recur ([seq '(1 2 3)])
(match seq
[(sequence) (void)]
[(sequence next next-rest ...)
(yield next)
(recur next-rest)]))))
给我以下错误:
sequence->list: contract violation
expected: sequence?
given: #<sequence>
in: the 1st argument of
(-> sequence? (listof any/c))
contract from:
<pkgs>/collections-lib/data/collection/collection.rkt
blaming: /var/folders/g4/0st3r3c513n6ymf2nkw11ml40000gn/T/ob-racket-CFPotf
(assuming the contract is correct)
at: <pkgs>/collections-lib/data/collection/collection.rkt:64.3
context...:
/usr/local/Cellar/minimal-racket/7.7/share/racket/collects/racket/contract/private/blame.rkt:347:0: raise-blame-error
/usr/local/Cellar/minimal-racket/7.7/share/racket/collects/racket/contract/combinator.rkt:324:9
/usr/local/Cellar/minimal-racket/7.7/share/racket/collects/racket/contract/private/arrow-val-first.rkt:486:18
"/var/folders/g4/0st3r3c513n6ymf2nkw11ml40000gn/T/ob-racket-CFPotf": [running body]
temp35_0
for-loop
run-module-instance!
perform-require!
没有生成器,如果我只是在做(cons next (recur next-rest)) 一切正常,所以它不应该与我的模式匹配代码有任何关系。但是话又说回来,我对生成器非常有信心,并且做过很多次这样的事情,只是没有模式匹配位。我很确定这应该工作,但不知道为什么我会收到这个错误,甚至不知道它意味着什么。
【问题讨论】:
标签: pattern-matching scheme generator racket