我正在尝试从 Racket 中的大型 csv 文件中解析日期。
最直接的方法是创建一个新date
结构。但它需要week-day
和year-day
参数。当然我没有这些,这似乎date
是我不理解的模块的一个真正弱点。
因此,作为替代方案,我决定使用find-seconds
将原始日期值转换为秒,然后将其传递给seconds->date
. 这有效,但速度非常慢。
(time
(let loop ([n 10000])
(apply find-seconds '(0 0 12 1 1 2012)) ; this takes 3 seconds for 10000
;(date 0 0 12 1 1 2012 0 0 #f 0) ; this is instant
(if (zero? n)
'done
(loop (sub1 n)))))
find-seconds
需要 3 秒来完成 10000 个值,而我有几百万。创建date
结构当然是即时的,但我没有工作日、年日的值。
我的问题是:
1.) 为什么week-day
/year-day
需要创建日期结构?
2.)find-seconds
应该这么慢(即错误)?还是我做错了什么?
3.)是否有任何替代方法可以快速解析日期。我知道srfi/19
有一个string->date
功能,但是我必须更改所有内容以使用该模块的结构而不是球拍的内置结构。它可能会遭受与 find-seconds 相同的性能损失,我不确定。