Пытаюсь создать дату из строки в Racket -найти -секунды ОЧЕНЬ медленно, неделя -день год -день требуется?

Я пытаюсь разобрать даты из большого CSV-файла в Racket.

Самый простой способ сделать это — создать новую структуру 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 -секунд, я не уверен.

12
задан Sam Tobin-Hochstadt 20 August 2012 в 11:54
поделиться