此示例代码在较长输入的情况下可能会 OOM,并且似乎会逐渐指数级变慢。如果不是 bug,那么它对于测试套件来说是一个有用的例子。
`
(s/def ::thing
(s/+ (s/alt :x (s/+ (set (range 70))))))
(time (s/conform ::thing (range 10))) ;; 30ms
(time (s/conform ::thing (range 15))) ;; 500ms
(time (s/conform ::thing (range 20))) ;; 24s
`
来自 Clojurians Slack 的用户 @petrus 的抓取,由 Max Penet 进行简化。