{"action":"opened","issue":{"url":"https://api.github.com/repos/lythesia/sicp-sol/issues/1","labels_url":"https://api.github.com/repos/lythesia/sicp-sol/issues/1/labels{/name}","comments_url":"https://api.github.com/repos/lythesia/sicp-sol/issues/1/comments","events_url":"https://api.github.com/repos/lythesia/sicp-sol/issues/1/events","html_url":"https://github.com/lythesia/sicp-sol/issues/1","id":53296831,"number":1,"title":"equality","user":{"login":"lythesia","id":1119483,"avatar_url":"https://avatars.githubusercontent.com/u/1119483?v=3","gravatar_id":"","url":"https://api.github.com/users/lythesia","html_url":"https://github.com/lythesia","followers_url":"https://api.github.com/users/lythesia/followers","following_url":"https://api.github.com/users/lythesia/following{/other_user}","gists_url":"https://api.github.com/users/lythesia/gists{/gist_id}","starred_url":"https://api.github.com/users/lythesia/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lythesia/subscriptions","organizations_url":"https://api.github.com/users/lythesia/orgs","repos_url":"https://api.github.com/users/lythesia/repos","events_url":"https://api.github.com/users/lythesia/events{/privacy}","received_events_url":"https://api.github.com/users/lythesia/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/lythesia/sicp-sol/labels/note","name":"note","color":"eb6420"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2015-01-03T07:00:50Z","updated_at":"2015-01-03T07:00:50Z","closed_at":null,"body":"* `eq?`\r\n  - whether respresent the same object in memory\r\n  - sp: only one empty list `'()` in memory\r\n  - on literals: it depends on implementation (`eq? 2 2`, `eq? \"2\" \"2\"`)\r\n* `eqv?`\r\n  - `#t` for the same things as `eq?`\r\n  - `#t` if it's a number or character and it's value is the same\r\n  - so it's superset of `eq?`\r\n  - `=` is like it, but only for numeric; maybe more efficient\r\n* `equal?`\r\n  - `#t` for the same things as `eqv?`\r\n  - if it's a compound type like pair, vector, string, and bytevector it recursively does `equal?` with the parts\r\n  - it will return `#t` if the two objects **looks the same**\r\n  - `string=?` is like it, but only for strings; maybe more efficient\r\n\r\nin general:\r\n\r\n1. use `=` when you wish to test whether two numbers are equivalent.\r\n2. use `eqv?` when you wish to test whether two non-numeric values are equivalent.\r\n3. use `equal?` when you wish to test whether two lists, vectors, etc. are equivalent.\r\n4. don't use the `eq?` unless you know exactly what you're doing."}}