<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><pre style="font-family: courier, 'courier new', monospace; font-size: 14px; white-space: pre-wrap; word-wrap: break-word; margin-top: 0px; margin-bottom: 0px; line-height: 19px; background-color: rgb(255, 255, 255); position: static; z-index: auto; ">&gt; (define (hash-equivalent? a b)
&gt;   (for/and ([(k v) (in-hash a)])
&gt;     (and (hash-has-key? b k)
&gt;          (equal? (hash-ref b k) v))))
&gt;</pre><div><br></div><div>It looks to me that this is true if a has a subset of b's keys. &nbsp;If that's true, an easy addition to the check is that (hash-count) is the same.</div><div><br></div><div apple-content-edited="true">
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>------</div><div>John Griffin, CTO</div><div>IT Talent Team, LLC</div><div><a href="http://www.ittalentteam.com">www.ittalentteam.com</a></div><div>855-488-8326</div><div><br></div><div><br></div></div><br class="Apple-interchange-newline"></div><br class="Apple-interchange-newline"><br class="Apple-interchange-newline">
</div>
<br><div><div>On Aug 17, 2013, at 12:00 PM, <a href="mailto:users-request@racket-lang.org">users-request@racket-lang.org</a> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Send users mailing list submissions to<br><span class="Apple-tab-span" style="white-space:pre">        </span><a href="mailto:users@racket-lang.org">users@racket-lang.org</a><br><br>To subscribe or unsubscribe via the World Wide Web, visit<br><span class="Apple-tab-span" style="white-space:pre">        </span>http://lists.racket-lang.org/users/listinfo<br>or, via email, send a message with subject or body 'help' to<br><span class="Apple-tab-span" style="white-space:pre">        </span>users-request@racket-lang.org<br><br>You can reach the person managing the list at<br><span class="Apple-tab-span" style="white-space:pre">        </span>users-owner@racket-lang.org<br><br>When replying, please edit your Subject line so it is more specific<br>than "Re: Contents of users digest..."<br><br><br>[Racket Users list:<br> http://lists.racket-lang.org/users ]<br><br><br>Today's Topics:<br><br> &nbsp;&nbsp;1. Re: (check-equal? hash1 hash2) fails (Robby Findler)<br> &nbsp;&nbsp;2. Re: (check-equal? hash1 hash2) fails (J G Cho)<br> &nbsp;&nbsp;3. Re: (check-equal? hash1 hash2) fails (Greg Hendershott)<br> &nbsp;&nbsp;4. Re: (check-equal? hash1 hash2) fails (Greg Hendershott)<br><br><br>----------------------------------------------------------------------<br><br>Message: 1<br>Date: Sat, 17 Aug 2013 08:18:48 -0500<br>From: Robby Findler &lt;robby@eecs.northwestern.edu&gt;<br>To: J G Cho &lt;gcho@fundingmatters.com&gt;<br>Cc: Racket mailing list &lt;users@racket-lang.org&gt;<br>Subject: Re: [racket] (check-equal? hash1 hash2) fails<br>Message-ID:<br><span class="Apple-tab-span" style="white-space:pre">        </span>&lt;CAL3TdOPVk9TBVq--doeMg5mPmeXWLGXHp4VK_4vUsdD1S_MJPg@mail.gmail.com&gt;<br>Content-Type: text/plain; charset="utf-8"<br><br>Those are equal if they are both mutable or both immutable. Probably one is<br>mutable and the other isn't (this, unfortunately, doesn't show up in the<br>print outs). It is quite confusing, I agree.<br><br><blockquote type="cite">(equal? #hash((6 . 1) (4 . 1) (3 . 2) (2 . 2)) #hash((2 . 2) (3 . 2) (4 .<br></blockquote>1) (6 . 1)))<br>#t<br><br>Robby<br><br><br><br>On Sat, Aug 17, 2013 at 8:13 AM, J G Cho &lt;gcho@fundingmatters.com&gt; wrote:<br><br><blockquote type="cite">FAILURE<br>actual: &nbsp;&nbsp;&nbsp;&nbsp;#hash((6 . 1) (4 . 1) (3 . 2) (2 . 2))<br>expected: &nbsp;&nbsp;#hash((2 . 2) (3 . 2) (4 . 1) (6 . 1))<br>name: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check-equal?<br><br>I tried alternative like<br>(check-true (hash-equal? hash1 hash2))<br><br> but it turns out hash-equal? is not what I expected it to be.<br><br>Other than writing a custom comparison, is there a handy way to compare 2<br>#hash?<br><br>jGc<br><br>____________________<br> &nbsp;Racket Users list:<br> &nbsp;http://lists.racket-lang.org/users<br><br><br></blockquote>-------------- next part --------------<br>An HTML attachment was scrubbed...<br>URL: &lt;http://lists.racket-lang.org/users/archive/attachments/20130817/371d8837/attachment-0001.html&gt;<br><br>------------------------------<br><br>Message: 2<br>Date: Sat, 17 Aug 2013 09:27:08 -0400<br>From: J G Cho &lt;gcho@fundingmatters.com&gt;<br>To: Robby Findler &lt;robby@eecs.northwestern.edu&gt;<br>Cc: Racket mailing list &lt;users@racket-lang.org&gt;<br>Subject: Re: [racket] (check-equal? hash1 hash2) fails<br>Message-ID:<br><span class="Apple-tab-span" style="white-space:pre">        </span>&lt;CAPW2k0So6FSBeheV29ukVK2aByRY4ir7g9kE64J-a5app70cQQ@mail.gmail.com&gt;<br>Content-Type: text/plain; charset="iso-8859-1"<br><br>You were right on.<br><br>So I converted one of the mutable and it worked:<br>(make-immutable-hash &nbsp;(hash-&gt;list mutable-hash))<br><br>Is there a better way?<br><br><br>On Sat, Aug 17, 2013 at 9:18 AM, Robby Findler<br>&lt;robby@eecs.northwestern.edu&gt;wrote:<br><br><blockquote type="cite">Those are equal if they are both mutable or both immutable. Probably one<br>is mutable and the other isn't (this, unfortunately, doesn't show up in the<br>print outs). It is quite confusing, I agree.<br><br><blockquote type="cite">(equal? #hash((6 . 1) (4 . 1) (3 . 2) (2 . 2)) #hash((2 . 2) (3 . 2) (4<br></blockquote>. 1) (6 . 1)))<br>#t<br><br>Robby<br><br><br><br>On Sat, Aug 17, 2013 at 8:13 AM, J G Cho &lt;gcho@fundingmatters.com&gt; wrote:<br><br><blockquote type="cite">FAILURE<br>actual: &nbsp;&nbsp;&nbsp;&nbsp;#hash((6 . 1) (4 . 1) (3 . 2) (2 . 2))<br>expected: &nbsp;&nbsp;#hash((2 . 2) (3 . 2) (4 . 1) (6 . 1))<br>name: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check-equal?<br><br>I tried alternative like<br>(check-true (hash-equal? hash1 hash2))<br><br> but it turns out hash-equal? is not what I expected it to be.<br><br>Other than writing a custom comparison, is there a handy way to compare 2<br>#hash?<br><br>jGc<br><br>____________________<br> &nbsp;Racket Users list:<br> &nbsp;http://lists.racket-lang.org/users<br><br><br></blockquote><br></blockquote>-------------- next part --------------<br>An HTML attachment was scrubbed...<br>URL: &lt;http://lists.racket-lang.org/users/archive/attachments/20130817/ecd43d2b/attachment-0001.html&gt;<br><br>------------------------------<br><br>Message: 3<br>Date: Sat, 17 Aug 2013 09:57:36 -0400<br>From: Greg Hendershott &lt;greghendershott@gmail.com&gt;<br>To: J G Cho &lt;gcho@fundingmatters.com&gt;<br>Cc: Racket mailing list &lt;users@racket-lang.org&gt;,<span class="Apple-tab-span" style="white-space:pre">        </span>Robby Findler<br><span class="Apple-tab-span" style="white-space:pre">        </span>&lt;robby@eecs.northwestern.edu&gt;<br>Subject: Re: [racket] (check-equal? hash1 hash2) fails<br>Message-ID:<br><span class="Apple-tab-span" style="white-space:pre">        </span>&lt;CAGspUn345MEBGQurqJbNM5xiUfqySqHrc1KhsB91mK1xoJOpwA@mail.gmail.com&gt;<br>Content-Type: text/plain; charset=ISO-8859-1<br><br>Well you could write your own predicate -- what you expected<br>`hash-equal?` to be. Let's call it `hash-equivalent?`:<br><br>#lang racket<br><br>(define (hash-equivalent? a b)<br> &nbsp;(for/and ([(k v) (in-hash a)])<br> &nbsp;&nbsp;&nbsp;(and (hash-has-key? b k)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(equal? (hash-ref b k) v))))<br><br>;; Testing<br>(require rackunit)<br>(define assocs '([a 0] [b 1]))<br>(define m (make-hash assocs))<br>(define i (make-immutable-hash assocs))<br>(check-true (hash-equivalent? m m))<br>(check-true (hash-equivalent? i i))<br>(check-true (hash-equivalent? m i))<br>(check-false (hash-equivalent? (make-hash '([a 0])) (make-hash '([a 1]))))<br>(check-false (equal? m i))<br><br>But actually, these days I would probably instead write a<br>`dict-equivalent?`, since it will work with all the hash variants,<br>association lists, and so on:<br><br>(define (dict-equivalent? a b)<br> &nbsp;(for/and ([(k v) (in-dict a)])<br> &nbsp;&nbsp;&nbsp;(and (dict-has-key? b k)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(equal? (dict-ref b k) v))))<br><br>;; Testing<br>(check-true (dict-equivalent? m m))<br>(check-true (dict-equivalent? i i))<br>(check-true (dict-equivalent? m i))<br>(check-false (dict-equivalent? (make-hash '([a 0])) (make-hash '([a 1]))))<br><br>p.s. There is no `dict-equal?`, so I suppose you could name it that<br>instead. Not sure if that would be less confusing, or more so.<br><br><br>On Sat, Aug 17, 2013 at 9:27 AM, J G Cho &lt;gcho@fundingmatters.com&gt; wrote:<br><blockquote type="cite">You were right on.<br><br>So I converted one of the mutable and it worked:<br>(make-immutable-hash &nbsp;(hash-&gt;list mutable-hash))<br><br>Is there a better way?<br><br><br>On Sat, Aug 17, 2013 at 9:18 AM, Robby Findler &lt;robby@eecs.northwestern.edu&gt;<br>wrote:<br><blockquote type="cite"><br>Those are equal if they are both mutable or both immutable. Probably one<br>is mutable and the other isn't (this, unfortunately, doesn't show up in the<br>print outs). It is quite confusing, I agree.<br><br><blockquote type="cite">(equal? #hash((6 . 1) (4 . 1) (3 . 2) (2 . 2)) #hash((2 . 2) (3 . 2) (4<br>. 1) (6 . 1)))<br></blockquote>#t<br><br>Robby<br><br><br><br>On Sat, Aug 17, 2013 at 8:13 AM, J G Cho &lt;gcho@fundingmatters.com&gt; wrote:<br><blockquote type="cite"><br>FAILURE<br>actual: &nbsp;&nbsp;&nbsp;&nbsp;#hash((6 . 1) (4 . 1) (3 . 2) (2 . 2))<br>expected: &nbsp;&nbsp;#hash((2 . 2) (3 . 2) (4 . 1) (6 . 1))<br>name: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check-equal?<br><br>I tried alternative like<br>(check-true (hash-equal? hash1 hash2))<br><br> but it turns out hash-equal? is not what I expected it to be.<br><br>Other than writing a custom comparison, is there a handy way to compare 2<br>#hash?<br><br>jGc<br><br>____________________<br> &nbsp;Racket Users list:<br> &nbsp;http://lists.racket-lang.org/users<br><br></blockquote><br></blockquote><br><br>____________________<br> &nbsp;Racket Users list:<br> &nbsp;http://lists.racket-lang.org/users<br><br></blockquote><br><br>------------------------------<br><br>Message: 4<br>Date: Sat, 17 Aug 2013 10:00:37 -0400<br>From: Greg Hendershott &lt;greghendershott@gmail.com&gt;<br>To: J G Cho &lt;gcho@fundingmatters.com&gt;<br>Cc: Racket mailing list &lt;users@racket-lang.org&gt;,<span class="Apple-tab-span" style="white-space:pre">        </span>Robby Findler<br><span class="Apple-tab-span" style="white-space:pre">        </span>&lt;robby@eecs.northwestern.edu&gt;<br>Subject: Re: [racket] (check-equal? hash1 hash2) fails<br>Message-ID:<br><span class="Apple-tab-span" style="white-space:pre">        </span>&lt;CAGspUn21F48UvtjOt0Um4g2ruuA45So87nkBQb8or1c48p8y7w@mail.gmail.com&gt;<br>Content-Type: text/plain; charset=ISO-8859-1<br><br>p.s. Probably better names would be `hash=?` and `dict=?`. Following<br>the example of `string=?`, `symbol=?`, etc.<br><br>On Sat, Aug 17, 2013 at 9:57 AM, Greg Hendershott<br>&lt;greghendershott@gmail.com&gt; wrote:<br><blockquote type="cite">Well you could write your own predicate -- what you expected<br>`hash-equal?` to be. Let's call it `hash-equivalent?`:<br><br>#lang racket<br><br>(define (hash-equivalent? a b)<br> &nbsp;(for/and ([(k v) (in-hash a)])<br> &nbsp;&nbsp;&nbsp;(and (hash-has-key? b k)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(equal? (hash-ref b k) v))))<br><br>;; Testing<br>(require rackunit)<br>(define assocs '([a 0] [b 1]))<br>(define m (make-hash assocs))<br>(define i (make-immutable-hash assocs))<br>(check-true (hash-equivalent? m m))<br>(check-true (hash-equivalent? i i))<br>(check-true (hash-equivalent? m i))<br>(check-false (hash-equivalent? (make-hash '([a 0])) (make-hash '([a 1]))))<br>(check-false (equal? m i))<br><br>But actually, these days I would probably instead write a<br>`dict-equivalent?`, since it will work with all the hash variants,<br>association lists, and so on:<br><br>(define (dict-equivalent? a b)<br> &nbsp;(for/and ([(k v) (in-dict a)])<br> &nbsp;&nbsp;&nbsp;(and (dict-has-key? b k)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(equal? (dict-ref b k) v))))<br><br>;; Testing<br>(check-true (dict-equivalent? m m))<br>(check-true (dict-equivalent? i i))<br>(check-true (dict-equivalent? m i))<br>(check-false (dict-equivalent? (make-hash '([a 0])) (make-hash '([a 1]))))<br><br>p.s. There is no `dict-equal?`, so I suppose you could name it that<br>instead. Not sure if that would be less confusing, or more so.<br><br><br>On Sat, Aug 17, 2013 at 9:27 AM, J G Cho &lt;gcho@fundingmatters.com&gt; wrote:<br><blockquote type="cite">You were right on.<br><br>So I converted one of the mutable and it worked:<br>(make-immutable-hash &nbsp;(hash-&gt;list mutable-hash))<br><br>Is there a better way?<br><br><br>On Sat, Aug 17, 2013 at 9:18 AM, Robby Findler &lt;robby@eecs.northwestern.edu&gt;<br>wrote:<br><blockquote type="cite"><br>Those are equal if they are both mutable or both immutable. Probably one<br>is mutable and the other isn't (this, unfortunately, doesn't show up in the<br>print outs). It is quite confusing, I agree.<br><br><blockquote type="cite">(equal? #hash((6 . 1) (4 . 1) (3 . 2) (2 . 2)) #hash((2 . 2) (3 . 2) (4<br>. 1) (6 . 1)))<br></blockquote>#t<br><br>Robby<br><br><br><br>On Sat, Aug 17, 2013 at 8:13 AM, J G Cho &lt;gcho@fundingmatters.com&gt; wrote:<br><blockquote type="cite"><br>FAILURE<br>actual: &nbsp;&nbsp;&nbsp;&nbsp;#hash((6 . 1) (4 . 1) (3 . 2) (2 . 2))<br>expected: &nbsp;&nbsp;#hash((2 . 2) (3 . 2) (4 . 1) (6 . 1))<br>name: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check-equal?<br><br>I tried alternative like<br>(check-true (hash-equal? hash1 hash2))<br><br> but it turns out hash-equal? is not what I expected it to be.<br><br>Other than writing a custom comparison, is there a handy way to compare 2<br>#hash?<br><br>jGc<br><br>____________________<br> &nbsp;Racket Users list:<br> &nbsp;http://lists.racket-lang.org/users<br><br></blockquote><br></blockquote><br><br>____________________<br> &nbsp;Racket Users list:<br> &nbsp;http://lists.racket-lang.org/users<br><br></blockquote></blockquote><br><br>End of users Digest, Vol 96, Issue 55<br>*************************************<br></blockquote></div><br></body></html>