Whitespace cleanup

This commit is contained in:
Dane Johnson 2025-01-03 10:28:27 -06:00
parent ec07a4e2ea
commit 337ddf8396
3 changed files with 61 additions and 61 deletions

50
d-.scm
View File

@ -45,8 +45,8 @@
(define-syntax-rule (if-let ([ident test]) expr ...) (define-syntax-rule (if-let ([ident test]) expr ...)
(let ([ident test]) (let ([ident test])
(if ident (if ident
(begin expr ...) (begin expr ...)
#f))) #f)))
(define-syntax for (define-syntax for
(syntax-rules () (syntax-rules ()
@ -54,20 +54,20 @@
[(for ([ident lst] bindings ...) expr ...) [(for ([ident lst] bindings ...) expr ...)
(let iter ([rest lst]) (let iter ([rest lst])
(if (pair? rest) (if (pair? rest)
(let ([ident (car rest)]) (let ([ident (car rest)])
(append (for (bindings ...) expr ...) (iter (cdr rest)))) (append (for (bindings ...) expr ...) (iter (cdr rest))))
'()))])) '()))]))
(define (partial fn . args) (define (partial fn . args)
(lambda x (apply fn (append args x)))) (lambda x (apply fn (append args x))))
(define (argmin arg lt? . vals) (define (argmin arg lt? . vals)
(reduce (lambda (val min) (reduce (lambda (val min)
(if (lt? (arg val) (arg min)) (if (lt? (arg val) (arg min))
val val
min)) min))
#f #f
vals)) vals))
(define (iterate n f v) (define (iterate n f v)
"Repeatedly call f on values returned from (f v)" "Repeatedly call f on values returned from (f v)"
@ -85,16 +85,16 @@
(if (null? preds) (if (null? preds)
(lambda (x) #t) (lambda (x) #t)
(lambda (x) (lambda (x)
(if ((car preds) x) (if ((car preds) x)
((apply conjoin (cdr preds)) x) ((apply conjoin (cdr preds)) x)
#f)))) #f))))
(define (distinct? . a) (define (distinct? . a)
"Are all values distinct, as in equal?" "Are all values distinct, as in equal?"
(if (or (null? a) (null? (cdr a))) (if (or (null? a) (null? (cdr a)))
#t #t
(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)))))
;; 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)
@ -105,8 +105,8 @@
(call-with-prompt tag (call-with-prompt tag
thunk thunk
(lambda (k value) (lambda (k value)
(set! thunk k) (set! thunk k)
value)))) value))))
(define-syntax generator (define-syntax generator
;; generator with an anaphoric yield ;; generator with an anaphoric yield
@ -114,9 +114,9 @@
(syntax-case x () (syntax-case x ()
[(generator expr ...) [(generator expr ...)
(with-syntax ([yield (datum->syntax x 'yield)]) (with-syntax ([yield (datum->syntax x 'yield)])
#'(make-generator #'(make-generator
(lambda (yield) (lambda (yield)
expr ...)))]))) expr ...)))])))
;; Why wasn't this included? ;; Why wasn't this included?
(define macro-expand (compose tree-il->scheme macroexpand)) (define macro-expand (compose tree-il->scheme macroexpand))
@ -131,12 +131,12 @@
[(amb a b ...) [(amb a b ...)
(let ([fail0 *fail*]) (let ([fail0 *fail*])
(call/cc (call/cc
(lambda (cc) (lambda (cc)
(set! *fail* (set! *fail*
(lambda () (lambda ()
(set! *fail* fail0) (set! *fail* fail0)
(cc (amb b ...)))) (cc (amb b ...))))
(cc a))))])) (cc a))))]))
(define (amb-reset) (define (amb-reset)
;; Shouldn't be necessary, but prompts are hard and I'm dumb dumb dummy ;; Shouldn't be necessary, but prompts are hard and I'm dumb dumb dummy
(set! *fail* (lambda () (error "Could not satisfy amb")))) (set! *fail* (lambda () (error "Could not satisfy amb"))))

View File

@ -13,25 +13,25 @@
(lambda (stx) (lambda (stx)
(with-syntax ([fail (datum->syntax stx 'fail)]) (with-syntax ([fail (datum->syntax stx 'fail)])
(define (assert-stx expr) (define (assert-stx expr)
(syntax-case expr (assert-equal assert-not-equal) (syntax-case expr (assert-equal assert-not-equal)
[(assert-equal e a) #'(assert e a equal? fail)] [(assert-equal e a) #'(assert e a equal? fail)]
[(assert-not-equal e a) #'(assert e a (compose not equal?) fail)] [(assert-not-equal e a) #'(assert e a (compose not equal?) fail)]
[(assert-unspecified v) #'(assert (when #f 'a) v eq? fail)] [(assert-unspecified v) #'(assert (when #f 'a) v eq? fail)]
[else #'else])) [else #'else]))
(define (define-test-stx test) (define (define-test-stx test)
(syntax-case test (define-test) (syntax-case test (define-test)
[(define-test test-name e ...) [(define-test test-name e ...)
#`(call/ec (lambda (fail) #`(call/ec (lambda (fail)
(format #t "~a: " test-name) (format #t "~a: " test-name)
(begin (begin
#,@(map assert-stx #'(e ...))) #,@(map assert-stx #'(e ...)))
(display "ok") (display "ok")
(newline)))])) (newline)))]))
(syntax-case stx () (syntax-case stx ()
[(define-test-suite name test ...) [(define-test-suite name test ...)
#`(begin #`(begin
(format #t "Suite ~a:" name) (format #t "Suite ~a:" name)
(newline) (newline)
#,@(map define-test-stx #,@(map define-test-stx
#'(test ...)) #'(test ...))
(newline))])))) (newline))]))))

View File

@ -34,8 +34,8 @@
(define-test-suite "for" (define-test-suite "for"
(define-test "permutation" (define-test "permutation"
(define value (for ([i (iota 2)] (define value (for ([i (iota 2)]
[j (iota 2)]) [j (iota 2)])
(cons i j))) (cons i j)))
(assert-equal '((0 . 0) (0 . 1) (1 . 0) (1 . 1)) value))) (assert-equal '((0 . 0) (0 . 1) (1 . 0) (1 . 1)) value)))
(define-test-suite "if-let" (define-test-suite "if-let"
@ -76,8 +76,8 @@
(define number-generator (define number-generator
(generator (generator
(let loop ([i 1]) (let loop ([i 1])
(yield i) (yield i)
(loop (1+ i))))) (loop (1+ i)))))
(assert-equal 1 (number-generator)) (assert-equal 1 (number-generator))
(assert-equal 2 (number-generator)) (assert-equal 2 (number-generator))
(assert-equal 3 (number-generator)) (assert-equal 3 (number-generator))
@ -88,18 +88,18 @@
(define (liars) (define (liars)
(amb-reset) (amb-reset)
(let ([betty (amb 1 2 3 4 5)] (let ([betty (amb 1 2 3 4 5)]
[ethel (amb 1 2 3 4 5)] [ethel (amb 1 2 3 4 5)]
[joan (amb 1 2 3 4 5)] [joan (amb 1 2 3 4 5)]
[kitty (amb 1 2 3 4 5)] [kitty (amb 1 2 3 4 5)]
[mary (amb 1 2 3 4 5)]) [mary (amb 1 2 3 4 5)])
;; The "Liars" problem ;; The "Liars" problem
(amb-require (distinct? betty ethel joan kitty mary)) (amb-require (distinct? betty ethel joan kitty mary))
(amb-require (or (= kitty 1) (= betty 3))) (amb-require (or (= kitty 1) (= betty 3)))
(amb-require (or (= ethel 1) (= joan 2))) (amb-require (or (= ethel 1) (= joan 2)))
(amb-require (or (= joan 3) (= ethel 5))) (amb-require (or (= joan 3) (= ethel 5)))
(amb-require (or (= kitty 2) (= mary 4))) (amb-require (or (= kitty 2) (= mary 4)))
(amb-require (or (= mary 4) (= betty 1))) (amb-require (or (= mary 4) (= betty 1)))
(list betty ethel joan kitty mary))) (list betty ethel joan kitty mary)))
(assert-equal '(3 5 2 1 4) (liars)))) (assert-equal '(3 5 2 1 4) (liars))))
(define-test-suite "json" (define-test-suite "json"