Replace amap/afilter/afor-each with alambda, lambda which destructures a pair into two args

This commit is contained in:
Dane Johnson 2025-03-03 09:02:10 -06:00
parent b40fe9cdec
commit 41b2467b42
2 changed files with 12 additions and 17 deletions

22
d-.scm
View File

@ -15,9 +15,7 @@
upply upply
conjoin conjoin
distinct? distinct?
amap alambda
afilter
afor-each
generator generator
macro-expand macro-expand
amb amb
@ -106,17 +104,13 @@
(and (not (any (lambda (x) (equal? (car a) x)) (cdr a))) (and (not (any (lambda (x) (equal? (car a) x)) (cdr a)))
(apply distinct? (cdr a))))) (apply distinct? (cdr a)))))
(define (amap f l) (define-syntax alambda
"Same as (map f l) but passes car and cdr to the function" (syntax-rules ()
(map (lambda (kons) (f (car kons) (cdr cons))) l)) [(alambda (kar kdr) body ...)
(lambda (kons)
(define (afilter f l) (let ([kar (car kons)]
"Same as (filter f l) but passes car and cdr to the function" [kdr (cdr kons)])
(filter (lambda (kons) (f (car kons) (cdr cons))) l)) body ...))]))
(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))
;; Shamelessly ripped from https://wingolog.org/archives/2013/02/25/on-generators ;; Shamelessly ripped from https://wingolog.org/archives/2013/02/25/on-generators
(define (make-generator f) (define (make-generator f)

View File

@ -80,9 +80,10 @@
(define-test "vacuous" (define-test "vacuous"
(assert-equal #t ((conjoin) '(some donkus))))) (assert-equal #t ((conjoin) '(some donkus)))))
(define-test-suite "map" (define-test-suite "alambda"
(define-test "test" (define-test "map"
(assert-equal ))) (assert-equal '(2 3 4)
(map (alambda (_ v) (1+ v)) '((a . 1) (b . 2) (c . 3))))))
(define-test-suite "generator" (define-test-suite "generator"
(define-test "test" (define-test "test"