tisp

tiny lisp
git clone git://edryd.org/tisp
Log | Files | Refs | LICENSE

commit b5f18b6adc4966f26e522dc677cdd684c46ad24e
parent efdb67a929094626d7362fd109f5988ee37ba58c
Author: Ed van Bruggen <edvb@uw.edu>
Date:   Sun, 29 Dec 2019 01:32:08 -0800

Add list filter function

Diffstat:
test.c | 23++++++++++++-----------
tibs/lib.tsp | 6++++++
2 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/test.c b/test.c @@ -262,17 +262,18 @@ char *tests[][2] = { { "(count 3.2 nil)", "0" }, { "(count \"Bobandy\" '(1/2 1/4 \"Jim\"))", "0" }, - { "apply", NULL }, - { "(apply list '(1 2 3))", "(1 2 3)" }, - { "(apply + '(2 90))", "92" }, - { "(apply list '(a b c d e))", "(a b c d e)" }, - - { "map", NULL }, - { "(map car '((1 a) (2 b) (3 c)))", "(1 2 3)" }, - { "(map cdr '((1 a) (2 b) (3 c)))", "((a) (b) (c))" }, - { "(map (lambda (x) (car (cdr x))) '((1 a) (2 b) (3 c)))", "(a b c)" }, - { "(map cadr '((1/2 .5) (\"conky\" .25) ('bubbles .125)))", "(0.5 0.25 0.125)" }, - { "(map inc (list 2 4 8 (^ 2 4)))", "(3 5 9 17)" }, + { "list proc", NULL }, + { "(apply list '(1 2 3))", "(1 2 3)" }, + { "(apply + '(2 90))", "92" }, + { "(apply list '(a b c d e))", "(a b c d e)" }, + { "(map car '((1 a) (2 b) (3 c)))", "(1 2 3)" }, + { "(map cdr '((1 a) (2 b) (3 c)))", "((a) (b) (c))" }, + { "(map (lambda (x) (car (cdr x))) '((1 a) (2 b) (3 c)))", "(a b c)" }, + { "(map cadr '((1/2 .5) (\"conky\" .25) ('bubbles .125)))", "(0.5 0.25 0.125)" }, + { "(map inc (list 2 4 8 (^ 2 4)))", "(3 5 9 17)" }, + { "(filter positive? '(1 2 -4 5 -9 10))", "(1 2 5 10)" }, + { "(filter odd? '(8 6 17 9 82 34 27))", "(17 9 27)" }, + { "(filter integer? '(1/2 3.e-2 9/3 3.2 0.0 8 17))", "(3 8 17)" }, { "list mod", NULL }, { "(reverse '(1 2 3 4 5))", "(5 4 3 2 1)" }, diff --git a/tibs/lib.tsp b/tibs/lib.tsp @@ -147,6 +147,12 @@ (map proc (cdr lst))) nil)) +(define (filter proc lst) + (cond + ((not (pair? lst)) nil) + ((proc (car lst)) (cons (car lst) (filter proc (cdr lst)))) + (else (filter proc (cdr lst))))) + (define (reverse l) (recur f ((in l) (out nil)) (if (pair? in)