Switch to SRFI-1.
This commit is contained in:
parent
1cd287f03b
commit
8a3b9f0b10
18 changed files with 45 additions and 144 deletions
|
@ -257,24 +257,6 @@ pair consisting of symbol created by interning the string of
|
||||||
non-whitespace characters before the first whitespace character and
|
non-whitespace characters before the first whitespace character and
|
||||||
the string with the rest of the line.
|
the string with the rest of the line.
|
||||||
|
|
||||||
## util-list [module]
|
|
||||||
|
|
||||||
(import util-list)
|
|
||||||
|
|
||||||
This module implements basic list functionality which is common in
|
|
||||||
most scheme implementations.
|
|
||||||
|
|
||||||
### filter [procedure]
|
|
||||||
|
|
||||||
(filter pred?
|
|
||||||
lst)
|
|
||||||
|
|
||||||
* ```pred?``` - procedure accepting any value and returning #t or #f
|
|
||||||
* ```lst``` - list to be filtered
|
|
||||||
|
|
||||||
Returns a list containing only elements matching given ```pred?```
|
|
||||||
predicate.
|
|
||||||
|
|
||||||
## util-proc [module]
|
## util-proc [module]
|
||||||
|
|
||||||
(import util-proc)
|
(import util-proc)
|
||||||
|
@ -428,12 +410,14 @@ sent to the address stored within.
|
||||||
(send-mail body-lines
|
(send-mail body-lines
|
||||||
#:from (from #f)
|
#:from (from #f)
|
||||||
#:to to
|
#:to to
|
||||||
#:subject subject)
|
#:subject subject
|
||||||
|
#:headers (headers (quote ())))
|
||||||
|
|
||||||
* ```body-lines``` - lines of the email
|
* ```body-lines``` - lines of the email
|
||||||
* ```from``` - email address from string
|
* ```from``` - email address from string
|
||||||
* ```to``` - email address to string
|
* ```to``` - email address to string
|
||||||
* ```subject``` - email subject string
|
* ```subject``` - email subject string
|
||||||
|
* ```headers``` - list of headers to add
|
||||||
|
|
||||||
Sends email using mail(1) command. The arguments ```#:to``` and
|
Sends email using mail(1) command. The arguments ```#:to``` and
|
||||||
```#:subject``` are mandatory. Argument ```#:from``` is optional.
|
```#:subject``` are mandatory. Argument ```#:from``` is optional.
|
||||||
|
|
|
@ -54,6 +54,7 @@ trap chicken_cleanup INT QUIT
|
||||||
|
|
||||||
# Install required eggs
|
# Install required eggs
|
||||||
chicken_install sqlite3
|
chicken_install sqlite3
|
||||||
|
chicken_install srfi-1
|
||||||
|
|
||||||
# Normal termination cleanup
|
# Normal termination cleanup
|
||||||
chicken_cleanup
|
chicken_cleanup
|
||||||
|
|
70
src/Makefile
70
src/Makefile
|
@ -56,28 +56,26 @@ HACKERBASE-OBJS=hackerbase.o testing.o listing.o cal-month.o \
|
||||||
util-git.o cal-day.o util-stdout.o cal-format.o table.o \
|
util-git.o cal-day.o util-stdout.o cal-format.o table.o \
|
||||||
sgr-list.o sgr-block.o table-processor.o table-border.o \
|
sgr-list.o sgr-block.o table-processor.o table-border.o \
|
||||||
table-style.o sgr-state.o util-utf8.o sgr-cell.o \
|
table-style.o sgr-state.o util-utf8.o sgr-cell.o \
|
||||||
template-list-expander.o box-drawing.o util-list.o \
|
template-list-expander.o box-drawing.o export-web-static.o \
|
||||||
export-web-static.o util-dir.o dokuwiki.o racket-kwargs.o \
|
util-dir.o dokuwiki.o racket-kwargs.o duck.o util-bst.o \
|
||||||
duck.o util-bst.o util-bst-bdict.o util-bst-ldict.o \
|
util-bst-bdict.o util-bst-ldict.o util-bst-lset.o mailman2.o \
|
||||||
util-bst-lset.o mailman2.o mailman-common.o mailman3.o \
|
mailman-common.o mailman3.o mailman3-sql.o
|
||||||
mailman3-sql.o
|
|
||||||
|
|
||||||
GENDOC-SOURCES=gendoc.scm duck-extract.import.scm \
|
GENDOC-SOURCES=gendoc.scm duck-extract.import.scm \
|
||||||
util-time.import.scm util-csv.import.scm util-git.import.scm \
|
util-time.import.scm util-csv.import.scm util-git.import.scm \
|
||||||
util-io.import.scm util-stdout.import.scm \
|
util-io.import.scm util-stdout.import.scm \
|
||||||
util-parser.import.scm util-list.import.scm \
|
util-parser.import.scm util-proc.import.scm \
|
||||||
util-proc.import.scm util-format.import.scm \
|
util-format.import.scm util-tag.import.scm \
|
||||||
util-tag.import.scm util-string.import.scm \
|
util-string.import.scm util-bst.import.scm \
|
||||||
util-bst.import.scm util-bst-bdict.import.scm \
|
util-bst-bdict.import.scm util-bst-ldict.import.scm \
|
||||||
util-bst-ldict.import.scm util-dir.import.scm \
|
util-dir.import.scm util-utf8.import.scm
|
||||||
util-utf8.import.scm
|
|
||||||
|
|
||||||
GENDOC-OBJS=gendoc.o duck-extract.o util-time.o util-csv.o util-io.o \
|
GENDOC-OBJS=gendoc.o duck-extract.o util-time.o util-csv.o util-io.o \
|
||||||
progress.o testing.o util-proc.o util-git.o util-io.o \
|
progress.o testing.o util-proc.o util-git.o util-io.o \
|
||||||
util-stdout.o util-parser.o util-list.o util-proc.o \
|
util-stdout.o util-parser.o util-proc.o util-format.o \
|
||||||
util-format.o racket-kwargs.o util-bst-ldict.o util-tag.o \
|
racket-kwargs.o util-bst-ldict.o util-tag.o duck.o \
|
||||||
duck.o util-string.o util-bst.o util-bst-bdict.o \
|
util-string.o util-bst.o util-bst-bdict.o util-bst-ldict.o \
|
||||||
util-bst-ldict.o util-dir.o util-utf8.o
|
util-dir.o util-utf8.o
|
||||||
|
|
||||||
.PHONY: imports
|
.PHONY: imports
|
||||||
imports: $(HACKERBASE-DEPS)
|
imports: $(HACKERBASE-DEPS)
|
||||||
|
@ -141,13 +139,13 @@ LISTING-SOURCES=listing.scm testing.import.scm ansi.import.scm \
|
||||||
listing.o: listing.import.scm
|
listing.o: listing.import.scm
|
||||||
listing.import.scm: $(LISTING-SOURCES)
|
listing.import.scm: $(LISTING-SOURCES)
|
||||||
|
|
||||||
ANSI-SOURCES=ansi.scm testing.import.scm util-list.import.scm
|
ANSI-SOURCES=ansi.scm testing.import.scm
|
||||||
|
|
||||||
ansi.o: ansi.import.scm
|
ansi.o: ansi.import.scm
|
||||||
ansi.import.scm: $(ANSI-SOURCES)
|
ansi.import.scm: $(ANSI-SOURCES)
|
||||||
|
|
||||||
COMMAND-LINE-SOURCES=command-line.scm testing.import.scm \
|
COMMAND-LINE-SOURCES=command-line.scm testing.import.scm \
|
||||||
util-proc.import.scm util-list.import.scm
|
util-proc.import.scm
|
||||||
|
|
||||||
command-line.o: command-line.import.scm
|
command-line.o: command-line.import.scm
|
||||||
command-line.import.scm: $(COMMAND-LINE-SOURCES)
|
command-line.import.scm: $(COMMAND-LINE-SOURCES)
|
||||||
|
@ -157,13 +155,12 @@ MBASE-SOURCES=mbase.scm testing.import.scm util-bst-ldict.import.scm \
|
||||||
cal-period.import.scm cal-month.import.scm \
|
cal-period.import.scm cal-month.import.scm \
|
||||||
configuration.import.scm progress.import.scm \
|
configuration.import.scm progress.import.scm \
|
||||||
mbase-dir.import.scm util-tag.import.scm \
|
mbase-dir.import.scm util-tag.import.scm \
|
||||||
racket-kwargs.import.scm util-bst-bdict.import.scm \
|
racket-kwargs.import.scm util-bst-bdict.import.scm
|
||||||
util-list.import.scm
|
|
||||||
|
|
||||||
mbase.o: mbase.import.scm
|
mbase.o: mbase.import.scm
|
||||||
mbase.import.scm: $(MBASE-SOURCES)
|
mbase.import.scm: $(MBASE-SOURCES)
|
||||||
|
|
||||||
PRIMES-SOURCES=primes.scm testing.import.scm util-list.import.scm
|
PRIMES-SOURCES=primes.scm testing.import.scm
|
||||||
|
|
||||||
primes.o: primes.import.scm
|
primes.o: primes.import.scm
|
||||||
primes.import.scm: $(PRIMES-SOURCES)
|
primes.import.scm: $(PRIMES-SOURCES)
|
||||||
|
@ -171,8 +168,7 @@ primes.import.scm: $(PRIMES-SOURCES)
|
||||||
BRMEMBER-SOURCES=brmember.scm util-bst-ldict.import.scm \
|
BRMEMBER-SOURCES=brmember.scm util-bst-ldict.import.scm \
|
||||||
cal-period.import.scm testing.import.scm cal-month.import.scm \
|
cal-period.import.scm testing.import.scm cal-month.import.scm \
|
||||||
configuration.import.scm primes.import.scm \
|
configuration.import.scm primes.import.scm \
|
||||||
bank-account.import.scm util-tag.import.scm \
|
bank-account.import.scm util-tag.import.scm
|
||||||
util-list.import.scm
|
|
||||||
|
|
||||||
brmember.o: brmember.import.scm
|
brmember.o: brmember.import.scm
|
||||||
brmember.import.scm: $(BRMEMBER-SOURCES)
|
brmember.import.scm: $(BRMEMBER-SOURCES)
|
||||||
|
@ -197,8 +193,7 @@ BRMEMBER-PARSER-SOURCES=brmember-parser.scm brmember.import.scm \
|
||||||
testing.import.scm util-bst-ldict.import.scm \
|
testing.import.scm util-bst-ldict.import.scm \
|
||||||
cal-month.import.scm cal-period.import.scm \
|
cal-month.import.scm cal-period.import.scm \
|
||||||
configuration.import.scm util-string.import.scm \
|
configuration.import.scm util-string.import.scm \
|
||||||
util-parser.import.scm cal-day.import.scm \
|
util-parser.import.scm cal-day.import.scm
|
||||||
util-list.import.scm
|
|
||||||
|
|
||||||
brmember-parser.o: brmember-parser.import.scm
|
brmember-parser.o: brmember-parser.import.scm
|
||||||
brmember-parser.import.scm: $(BRMEMBER-PARSER-SOURCES)
|
brmember-parser.import.scm: $(BRMEMBER-PARSER-SOURCES)
|
||||||
|
@ -210,23 +205,21 @@ MEMBERS-PRINT-SOURCES=members-print.scm util-bst-ldict.import.scm \
|
||||||
bank-account.import.scm members-fees.import.scm \
|
bank-account.import.scm members-fees.import.scm \
|
||||||
members-payments.import.scm brmember-format.import.scm \
|
members-payments.import.scm brmember-format.import.scm \
|
||||||
specification.import.scm cal-format.import.scm \
|
specification.import.scm cal-format.import.scm \
|
||||||
util-git.import.scm util-list.import.scm \
|
util-git.import.scm racket-kwargs.import.scm
|
||||||
racket-kwargs.import.scm
|
|
||||||
|
|
||||||
members-print.o: members-print.import.scm
|
members-print.o: members-print.import.scm
|
||||||
members-print.import.scm: $(MEMBERS-PRINT-SOURCES)
|
members-print.import.scm: $(MEMBERS-PRINT-SOURCES)
|
||||||
|
|
||||||
MEMBERS-FEES-SOURCES=members-fees.scm configuration.import.scm \
|
MEMBERS-FEES-SOURCES=members-fees.scm configuration.import.scm \
|
||||||
brmember.import.scm cal-month.import.scm table.import.scm \
|
brmember.import.scm cal-month.import.scm table.import.scm \
|
||||||
mbase.import.scm specification.import.scm \
|
mbase.import.scm specification.import.scm
|
||||||
util-list.import.scm
|
|
||||||
|
|
||||||
members-fees.o: members-fees.import.scm
|
members-fees.o: members-fees.import.scm
|
||||||
members-fees.import.scm: $(MEMBERS-FEES-SOURCES)
|
members-fees.import.scm: $(MEMBERS-FEES-SOURCES)
|
||||||
|
|
||||||
MBASE-DIR-SOURCES=mbase-dir.scm testing.import.scm \
|
MBASE-DIR-SOURCES=mbase-dir.scm testing.import.scm \
|
||||||
util-bst-ldict.import.scm brmember.import.scm \
|
util-bst-ldict.import.scm brmember.import.scm \
|
||||||
brmember-parser.import.scm util-list.import.scm
|
brmember-parser.import.scm
|
||||||
|
|
||||||
mbase-dir.o: mbase-dir.import.scm
|
mbase-dir.o: mbase-dir.import.scm
|
||||||
mbase-dir.import.scm: $(MBASE-DIR-SOURCES)
|
mbase-dir.import.scm: $(MBASE-DIR-SOURCES)
|
||||||
|
@ -252,7 +245,7 @@ MEMBERS-PAYMENTS-SOURCES=members-payments.scm bank-account.import.scm \
|
||||||
util-bst-ldict.import.scm members-fees.import.scm \
|
util-bst-ldict.import.scm members-fees.import.scm \
|
||||||
cal-period.import.scm configuration.import.scm \
|
cal-period.import.scm configuration.import.scm \
|
||||||
progress.import.scm bank-fio.import.scm \
|
progress.import.scm bank-fio.import.scm \
|
||||||
specification.import.scm util-list.import.scm
|
specification.import.scm
|
||||||
|
|
||||||
members-payments.o: members-payments.import.scm
|
members-payments.o: members-payments.import.scm
|
||||||
members-payments.import.scm: $(MEMBERS-PAYMENTS-SOURCES)
|
members-payments.import.scm: $(MEMBERS-PAYMENTS-SOURCES)
|
||||||
|
@ -262,9 +255,9 @@ ENVIRONMENT-SOURCES=environment.scm ansi.import.scm
|
||||||
environment.o: environment.import.scm
|
environment.o: environment.import.scm
|
||||||
environment.import.scm: $(ENVIRONMENT-SOURCES)
|
environment.import.scm: $(ENVIRONMENT-SOURCES)
|
||||||
|
|
||||||
MAILMAN2-SOURCES=mailman2.scm util-bst-lset.import.scm \
|
MAILMAN2-SOURCES=mailman2.scm util-bst-lset.import.scm \
|
||||||
util-io.import.scm util-list.import.scm \
|
util-io.import.scm mailman-common.import.scm \
|
||||||
mailman-common.import.scm configuration.import.scm
|
configuration.import.scm
|
||||||
|
|
||||||
mailman2.o: mailman2.import.scm
|
mailman2.o: mailman2.import.scm
|
||||||
mailman2.import.scm: $(MAILMAN2-SOURCES)
|
mailman2.import.scm: $(MAILMAN2-SOURCES)
|
||||||
|
@ -473,11 +466,6 @@ BOX-DRAWING-SOURCES=box-drawing.scm util-utf8.import.scm \
|
||||||
box-drawing.o: box-drawing.import.scm
|
box-drawing.o: box-drawing.import.scm
|
||||||
box-drawing.import.scm: $(BOX-DRAWING-SOURCES)
|
box-drawing.import.scm: $(BOX-DRAWING-SOURCES)
|
||||||
|
|
||||||
UTIL-LIST-SOURCES=util-list.scm testing.import.scm duck.import.scm
|
|
||||||
|
|
||||||
util-list.o: util-list.import.scm
|
|
||||||
util-list.import.scm: $(UTIL-LIST-SOURCES)
|
|
||||||
|
|
||||||
EXPORT-WEB-STATIC-SOURCES=export-web-static.scm brmember.import.scm \
|
EXPORT-WEB-STATIC-SOURCES=export-web-static.scm brmember.import.scm \
|
||||||
util-dir.import.scm mbase.import.scm \
|
util-dir.import.scm mbase.import.scm \
|
||||||
members-payments.import.scm cal-day.import.scm \
|
members-payments.import.scm cal-day.import.scm \
|
||||||
|
@ -527,8 +515,7 @@ util-bst-ldict.o: util-bst-ldict.import.scm
|
||||||
util-bst-ldict.import.scm: $(UTIL-BST-LDICT-SOURCES)
|
util-bst-ldict.import.scm: $(UTIL-BST-LDICT-SOURCES)
|
||||||
|
|
||||||
UTIL-BST-LSET-SOURCES=util-bst-lset.scm util-bst.import.scm \
|
UTIL-BST-LSET-SOURCES=util-bst-lset.scm util-bst.import.scm \
|
||||||
racket-kwargs.import.scm util-bst-ldict.import.scm \
|
racket-kwargs.import.scm util-bst-ldict.import.scm
|
||||||
util-list.import.scm
|
|
||||||
|
|
||||||
util-bst-lset.o: util-bst-lset.import.scm
|
util-bst-lset.o: util-bst-lset.import.scm
|
||||||
util-bst-lset.import.scm: $(UTIL-BST-LSET-SOURCES)
|
util-bst-lset.import.scm: $(UTIL-BST-LSET-SOURCES)
|
||||||
|
@ -547,8 +534,7 @@ mailman-common.o: mailman-common.import.scm
|
||||||
mailman-common.import.scm: $(MAILMAN-COMMON-SOURCES)
|
mailman-common.import.scm: $(MAILMAN-COMMON-SOURCES)
|
||||||
|
|
||||||
MAILMAN3-SOURCES=mailman3.scm configuration.import.scm \
|
MAILMAN3-SOURCES=mailman3.scm configuration.import.scm \
|
||||||
util-io.import.scm mailman3-sql.import.scm \
|
util-io.import.scm mailman3-sql.import.scm
|
||||||
util-list.import.scm
|
|
||||||
|
|
||||||
mailman3.o: mailman3.import.scm
|
mailman3.o: mailman3.import.scm
|
||||||
mailman3.import.scm: $(MAILMAN3-SOURCES)
|
mailman3.import.scm: $(MAILMAN3-SOURCES)
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
(chicken string)
|
(chicken string)
|
||||||
(chicken irregex)
|
(chicken irregex)
|
||||||
(chicken keyword)
|
(chicken keyword)
|
||||||
util-list
|
srfi-1
|
||||||
testing)
|
testing)
|
||||||
|
|
||||||
;; Only basic ANSI colors and bold attribute support.
|
;; Only basic ANSI colors and bold attribute support.
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
(chicken io)
|
(chicken io)
|
||||||
(chicken irregex)
|
(chicken irregex)
|
||||||
(chicken string)
|
(chicken string)
|
||||||
util-list
|
srfi-1
|
||||||
brmember
|
brmember
|
||||||
testing
|
testing
|
||||||
util-bst-ldict
|
util-bst-ldict
|
||||||
|
|
|
@ -94,7 +94,7 @@
|
||||||
(chicken irregex)
|
(chicken irregex)
|
||||||
(chicken string)
|
(chicken string)
|
||||||
(chicken format)
|
(chicken format)
|
||||||
util-list
|
srfi-1
|
||||||
util-bst-ldict
|
util-bst-ldict
|
||||||
testing
|
testing
|
||||||
cal-month
|
cal-month
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
(chicken base)
|
(chicken base)
|
||||||
(chicken process-context)
|
(chicken process-context)
|
||||||
(chicken format)
|
(chicken format)
|
||||||
util-list
|
srfi-1
|
||||||
testing
|
testing
|
||||||
util-proc)
|
util-proc)
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
util-io
|
util-io
|
||||||
util-stdout
|
util-stdout
|
||||||
util-parser
|
util-parser
|
||||||
util-list
|
|
||||||
util-proc
|
util-proc
|
||||||
util-format
|
util-format
|
||||||
util-tag
|
util-tag
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
(chicken string)
|
(chicken string)
|
||||||
(chicken sort)
|
(chicken sort)
|
||||||
(chicken format)
|
(chicken format)
|
||||||
util-list
|
srfi-1
|
||||||
util-bst-lset
|
util-bst-lset
|
||||||
util-io
|
util-io
|
||||||
mailman-common
|
mailman-common
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
(chicken format)
|
(chicken format)
|
||||||
configuration
|
configuration
|
||||||
util-io
|
util-io
|
||||||
util-list
|
srfi-1
|
||||||
mailman3-sql)
|
mailman3-sql)
|
||||||
|
|
||||||
;; Just a convenient converter
|
;; Just a convenient converter
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
(chicken file)
|
(chicken file)
|
||||||
(chicken format)
|
(chicken format)
|
||||||
(chicken irregex)
|
(chicken irregex)
|
||||||
util-list
|
srfi-1
|
||||||
testing
|
testing
|
||||||
util-bst-ldict
|
util-bst-ldict
|
||||||
brmember
|
brmember
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
(chicken string)
|
(chicken string)
|
||||||
(chicken random)
|
(chicken random)
|
||||||
(chicken sort)
|
(chicken sort)
|
||||||
util-list
|
srfi-1
|
||||||
testing
|
testing
|
||||||
util-bst-ldict
|
util-bst-ldict
|
||||||
primes
|
primes
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
(chicken base)
|
(chicken base)
|
||||||
(chicken format)
|
(chicken format)
|
||||||
(chicken sort)
|
(chicken sort)
|
||||||
util-list
|
srfi-1
|
||||||
configuration
|
configuration
|
||||||
brmember
|
brmember
|
||||||
cal-month
|
cal-month
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
(chicken process-context)
|
(chicken process-context)
|
||||||
(chicken pathname)
|
(chicken pathname)
|
||||||
(chicken condition)
|
(chicken condition)
|
||||||
util-list
|
srfi-1
|
||||||
bank-account
|
bank-account
|
||||||
brmember
|
brmember
|
||||||
mbase
|
mbase
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
(chicken string)
|
(chicken string)
|
||||||
(chicken sort)
|
(chicken sort)
|
||||||
(chicken format)
|
(chicken format)
|
||||||
util-list
|
srfi-1
|
||||||
util-bst-ldict
|
util-bst-ldict
|
||||||
brmember
|
brmember
|
||||||
cal-month
|
cal-month
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
|
|
||||||
(import scheme
|
(import scheme
|
||||||
(chicken base)
|
(chicken base)
|
||||||
util-list
|
srfi-1
|
||||||
testing)
|
testing)
|
||||||
|
|
||||||
;; Checks whether given number is prime by checking the remainder of
|
;; Checks whether given number is prime by checking the remainder of
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
util-bst
|
util-bst
|
||||||
racket-kwargs
|
racket-kwargs
|
||||||
util-bst-ldict
|
util-bst-ldict
|
||||||
util-list)
|
srfi-1)
|
||||||
|
|
||||||
(define* (make-lset (equality? equal?))
|
(define* (make-lset (equality? equal?))
|
||||||
(make-bst 'lset equality? ldict<?))
|
(make-bst 'lset equality? ldict<?))
|
||||||
|
|
|
@ -1,69 +0,0 @@
|
||||||
;;
|
|
||||||
;; util-list.scm
|
|
||||||
;;
|
|
||||||
;; Various utilities so that no external libraries are needed.
|
|
||||||
;;
|
|
||||||
;; ISC License
|
|
||||||
;;
|
|
||||||
;; Copyright 2023 Brmlab, z.s.
|
|
||||||
;; Dominik Pantůček <dominik.pantucek@trustica.cz>
|
|
||||||
;;
|
|
||||||
;; Permission to use, copy, modify, and/or distribute this software
|
|
||||||
;; for any purpose with or without fee is hereby granted, provided
|
|
||||||
;; that the above copyright notice and this permission notice appear
|
|
||||||
;; in all copies.
|
|
||||||
;;
|
|
||||||
;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
|
||||||
;; WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
|
||||||
;; WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
|
||||||
;; AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
|
|
||||||
;; CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
|
||||||
;; OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
|
||||||
;; NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
|
||||||
;; CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
;;
|
|
||||||
|
|
||||||
(declare (unit util-list))
|
|
||||||
|
|
||||||
(import duck)
|
|
||||||
|
|
||||||
(module*
|
|
||||||
util-list
|
|
||||||
#:doc ("This module implements basic list functionality which is common in
|
|
||||||
most scheme implementations.")
|
|
||||||
(
|
|
||||||
filter
|
|
||||||
util-list-tests!
|
|
||||||
)
|
|
||||||
|
|
||||||
(import scheme
|
|
||||||
(chicken base)
|
|
||||||
(chicken io)
|
|
||||||
(chicken process)
|
|
||||||
testing)
|
|
||||||
|
|
||||||
(define/doc (filter pred? lst)
|
|
||||||
("* ```pred?``` - procedure accepting any value and returning #t or #f
|
|
||||||
* ```lst``` - list to be filtered
|
|
||||||
|
|
||||||
Returns a list containing only elements matching given ```pred?```
|
|
||||||
predicate.")
|
|
||||||
(let loop ((lst lst)
|
|
||||||
(res '()))
|
|
||||||
(if (null? lst)
|
|
||||||
(reverse res)
|
|
||||||
(if (pred? (car lst))
|
|
||||||
(loop (cdr lst)
|
|
||||||
(cons (car lst) res))
|
|
||||||
(loop (cdr lst)
|
|
||||||
res)))))
|
|
||||||
|
|
||||||
;; Performs utils module self-tests.
|
|
||||||
(define (util-list-tests!)
|
|
||||||
(run-tests
|
|
||||||
util-list
|
|
||||||
(test-equal? filter (filter odd? '(1 2 3 4)) '(1 3))
|
|
||||||
(test-equal? filter (filter odd? '(2 4)) '())
|
|
||||||
))
|
|
||||||
|
|
||||||
)
|
|
Loading…
Add table
Add a link
Reference in a new issue