memory heap
373 subscribers
2.53K photos
514 videos
52 files
3.11K links
science ∩ art = wonder

all memory blocks here are allocated by @a_v_p

GitHub: https://github.com/artyom-poptsov
Mastodon: https://fosstodon.org/@avp

https://memory-heap.org/~avp/
Download Telegram
Преисполнился (ice-9 match) :

(use-modules (ice-9 match) (srfi srfi-1))

(define (in-range? value ranges)
(and (number? value)
(match ranges
(((? number?) . (? number?))
(and (>= value (car ranges)) (<= value (cdr ranges))))
((((? number?) . (? number?)) ...)
(fold (lambda (range prev)
(or prev
(and (>= value (car range))
(<= value (cdr range)))))
#f
ranges)))))

(in-range? -1 '((1 . 10) (-2 . -1)))
=> #t

(in-range? -10 '((1 . 10) (-2 . -1)))
=> #f

(in-range? 10 '(1 . 10))
=> #t


#lisp #scheme
1🔥1
#projects #guile_ics #guile #scheme

Несколько дней работал над улучшением Guile-ICS (мне тут недавно написали issue на GitHub с просьбой реализовать нормальную поддержку RRULE — параметров повторяемости событий календаря.)

Теперь поддержка есть, только нехватает ещё вспомогательных процедур для работы с повторяющимися событиями.

Вот, как пример, вывод консольной утилиты для работы с форматом iCalendar, базирующейся на API библиотеки и поставляющейся вместе с ней. Здесь можно видеть разобранный и затем склеянный обратно (для красивого вывода) параметр RRULE:
$ ./pre-inst-env ./utils/ics rrule.ics 
BEGIN: VCALENDAR
BEGIN: VEVENT
RRULE (RECUR): FREQ=YEARLY; INTERVAL=2; BYMINUTE=30; BYHOUR=8,9,10; BYDAY=SU; BYMONTH=1
END: VEVENT
END: VCALENDAR


Значения параметров повторения теперь не только парсятся, но и проверяются на корректность. Библиотека не только бросается ошибками при некорректных значениях, но ещё и выдаёт справку по использованию данных параметров — по сути, куски RFC.
🔥1
David Thompson, "Optimizing Guile Scheme":
https://dthompson.us/posts/optimizing-guile-scheme.html

Интересная статья про оптимизацию программ на моём любимом языке программирования.

#guile #scheme #programming
🔥2
Выпустил Guile-SMC 0.6.4 с исправлением ошибок:
https://github.com/artyom-poptsov/guile-smc/releases/tag/v0.6.4

Основное исправление — Make больше не запускает генерацию целевого файла puml-fsm.scm из исходгого puml.puml, когда исходный поменялся. Вместо этого генерация запускается только тогда, когда puml-fsm.scm удалён. Это позволяет избежать иногда возникающих ситуаций, когда система сборки пытается сгенерировать puml-fsm.scm из puml.puml без наличия установленного Guile-SMC в системе, что приводило к ошибке (так как для этого нужен Guile-SMC.)

#projects #guile #guile_smc #scheme
Наконец-то добрался до своих FOSS-проектов. Замёржил в Guile-DSV патч от Denis 'GNUtoo' Carikli, добавляющий возможность указывать собсвтенную процедуру для нарезки строк при форматировании таблицы.

Попутно внёс ещё несколько небольших улучшений.

#guile #scheme #projects #guile_dsv
Выпустил релиз Guile-DSV 0.8.0:
https://github.com/artyom-poptsov/guile-dsv/releases/tag/v0.8.0

В новой версии:
- Исправлен баг с чтением данных в формате RFC4180, где строки заканчиваются символом "LF", вместо рекомендуемой в RFC комбинации "CRLF". Теперь данные читаются корректно. Хотя это поведение не соответствует стандарту RFC4180, в данном случае Guile-DSV придерживается принципа надёжности ("Будь корсервативен в том, что отправляешь — и либеральным в том, что принимаешь.")
- Новые параметры для процедур в модуле (dsv table): Процедуры format-table, table-wrap и table-wrap-row теперь принимают параметр string-slice, который позволяет контролировать, как столбцы таблицы вписываются в требуемую ширину. Процедуры table-wrap и format-table теперь принимают параметр calculate-cell-widths, который позволяет изменить поведение Guile-DSV при подсчёте ширины столбцов таблицы.
- Обновлена документация: теперь в Info документации подробно расписаны параметры таблицы; кроме того, добавлено описание новых параметров процедур.
- Файл README обновлён, теперь он более читаемый и информативный.

#projects #scheme #lisp