Allow plotting very large CSV files

Using apply leads to implementation limits in the number of arguments
which are fairly low. Refactoring everything as folds allows to handle
an arbitrary number of datapoints.
This commit is contained in:
Dimitri Lozeve 2021-10-23 19:34:10 +02:00
parent b138a28101
commit 98c6ab537c
2 changed files with 13 additions and 10 deletions

View file

@ -3,15 +3,18 @@
(export main)
(import :std/iter
:std/misc/func
:std/text/csv
:dlozeve/uniplot/lineplot)
(def (parse-number s)
(or (string->number s) +nan.0))
(def (main . args)
(def csv (read-csv-lines (current-input-port)))
(def names (car csv))
(def lsts
(apply map list
(for/collect ((row (cdr csv)))
(for/collect ((x row))
(or (string->number x) +nan.0)))))
(for/fold (lsts (repeat '() (length names)))
((row (cdr csv)))
(map cons (map parse-number row) lsts)))
(displayln (line-plot lsts title: (if (null? args) "" (car args)) names: names)))