From 3556e63551097ba2e7eee37c4ddf27cde2e17a79 Mon Sep 17 00:00:00 2001 From: AlexKnauth Date: Sun, 5 Jul 2015 03:05:21 -0400 Subject: [PATCH] fix assoc-lens to work with pairs fixes https://github.com/jackfirth/lenses/issues/24 --- lenses/list/assoc.rkt | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/lenses/list/assoc.rkt b/lenses/list/assoc.rkt index c109310..9e5b4b6 100644 --- a/lenses/list/assoc.rkt +++ b/lenses/list/assoc.rkt @@ -17,15 +17,15 @@ (define (assoc-set assoc-list key value #:is-equal? [equal? equal?]) (define (set-assoc-pair assoc-pair) - (if (equal? (first assoc-pair) key) - (list (first assoc-pair) value) + (if (equal? (car assoc-pair) key) + (cons (car assoc-pair) value) assoc-pair)) (map set-assoc-pair assoc-list)) (module+ test - (define assoc-list '((a 1) (b 2) (c 3))) - (check-equal? (assoc-swap assoc-list '(b 2) '(FOO BAR)) - '((a 1) (FOO BAR) (c 3)))) + (define assoc-list '((a . 1) (b . 2) (c . 3))) + (check-equal? (assoc-swap assoc-list '(b . 2) '(FOO . BAR)) + '((a . 1) (FOO . BAR) (c . 3)))) (define ((assoc-lens key #:is-equal? [equal? equal?]) assoc-list) @@ -33,8 +33,8 @@ (define (assoc-lens-set v) (if assoc-pair (assoc-set assoc-list key v #:is-equal? equal?) - (append assoc-list (list (list key v))))) - (values (and assoc-pair (second assoc-pair)) + (append assoc-list (list (cons key v))))) + (values (and assoc-pair (cdr assoc-pair)) assoc-lens-set)) (module+ test @@ -42,15 +42,15 @@ (define assoc-d-lens (assoc-lens 'd)) (check-equal? (lens-view assoc-a-lens assoc-list) 1) (check-equal? (lens-set assoc-a-lens assoc-list 100) - '((a 100) (b 2) (c 3))) + '((a . 100) (b . 2) (c . 3))) (check-false (lens-view assoc-d-lens assoc-list)) (check-equal? (lens-set assoc-d-lens assoc-list 4) - '((a 1) (b 2) (c 3) (d 4))) + '((a . 1) (b . 2) (c . 3) (d . 4))) (define assoc-foo-lens (assoc-lens "foo")) - (define assoc-str '(("bar" 1) ("foo" 2) ("baz" 3))) + (define assoc-str '(("bar" . 1) ("foo" . 2) ("baz" . 3))) (check-equal? (lens-view assoc-foo-lens assoc-str) 2) (check-equal? (lens-set assoc-foo-lens assoc-str 100) - '(("bar" 1) ("foo" 100) ("baz" 3)))) + '(("bar" . 1) ("foo" . 100) ("baz" . 3)))) (define (assv-lens assv-key) @@ -58,10 +58,10 @@ (module+ test (define assv-2-lens (assv-lens 2)) - (define assv-list '((1 a) (2 b) (3 c))) + (define assv-list '((1 . a) (2 . b) (3 . c))) (check-eq? (lens-view assv-2-lens assv-list) 'b) (check-equal? (lens-set assv-2-lens assv-list 'FOO) - '((1 a) (2 FOO) (3 c)))) + '((1 . a) (2 . FOO) (3 . c)))) (define (assq-lens assq-key) @@ -69,8 +69,8 @@ (module+ test (define assq-a-lens (assq-lens 'a)) - (define assq-list '((a 1) (b 2) (c 3))) + (define assq-list '((a . 1) (b . 2) (c . 3))) (check-eqv? (lens-view assq-a-lens assq-list) 1) (check-equal? (lens-set assq-a-lens assq-list 100) - '((a 100) (b 2) (c 3)))) + '((a . 100) (b . 2) (c . 3))))