diff --git a/d-.scm b/d-.scm index eb2b354..3540ad2 100644 --- a/d-.scm +++ b/d-.scm @@ -15,9 +15,7 @@ upply conjoin distinct? - amap - afilter - afor-each + alambda generator macro-expand amb @@ -106,17 +104,13 @@ (and (not (any (lambda (x) (equal? (car a) x)) (cdr a))) (apply distinct? (cdr a))))) -(define (amap f l) - "Same as (map f l) but passes car and cdr to the function" - (map (lambda (kons) (f (car kons) (cdr cons))) l)) - -(define (afilter f l) - "Same as (filter f l) but passes car and cdr to the function" - (filter (lambda (kons) (f (car kons) (cdr cons))) l)) - -(define (afor-each f l) - "Same as (for-each f l) but passes car and cdr to the function" - (for-each (lambda (kons) (f (car kons) (cdr cons))) l)) +(define-syntax alambda + (syntax-rules () + [(alambda (kar kdr) body ...) + (lambda (kons) + (let ([kar (car kons)] + [kdr (cdr kons)]) + body ...))])) ;; Shamelessly ripped from https://wingolog.org/archives/2013/02/25/on-generators (define (make-generator f) diff --git a/test.scm b/test.scm index c58a4dd..4dc7554 100644 --- a/test.scm +++ b/test.scm @@ -80,9 +80,10 @@ (define-test "vacuous" (assert-equal #t ((conjoin) '(some donkus))))) -(define-test-suite "map" - (define-test "test" - (assert-equal ))) +(define-test-suite "alambda" + (define-test "map" + (assert-equal '(2 3 4) + (map (alambda (_ v) (1+ v)) '((a . 1) (b . 2) (c . 3)))))) (define-test-suite "generator" (define-test "test"