{"id":234,"date":"2012-07-13T22:56:49","date_gmt":"2012-07-13T12:56:49","guid":{"rendered":"http:\/\/juliangamble.com\/blog\/?p=234"},"modified":"2017-01-03T10:02:41","modified_gmt":"2017-01-02T23:02:41","slug":"amazing-lisp-books-living-again-in-clojure","status":"publish","type":"post","link":"https:\/\/juliangamble.com\/blog\/2012\/07\/13\/amazing-lisp-books-living-again-in-clojure\/","title":{"rendered":"Amazing LISP Books living again in Clojure"},"content":{"rendered":"<p>The LISP family of languages has a rich heritage, with some epic tomes gracing Computer Science history (and our shelves) over the years. \u00a0Clojure is the latest entrant in the LISP family, bringing concurrency advances and the richness of the JVM ecosystem to the table. For Clojure this means there is much legacy code to <del>plunder<\/del> reuse.<\/p>\n<p><a href=\"http:\/\/www.ccs.neu.edu\/home\/matthias\/BTLS\/\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-235\" title=\"The Little Schemer\" src=\"http:\/\/juliangamble.com\/blog\/wp-content\/uploads\/2012\/07\/TLSCover.png\" alt=\"\" width=\"202\" height=\"249\" \/><\/a><\/p>\n<h3>The Little Schemer<\/h3>\n<p>An old favourite for many people who studied this in College or at home &#8211; <a href=\"http:\/\/www.ccs.neu.edu\/home\/matthias\/BTLS\/\">The Little Schemer<\/a> is the way many people have started the road to LISP. \u00a0Described as <a href=\"http:\/\/anthonylewis.com\/2007\/11\/03\/the-little-schemer\/\">&#8216;mind blowing&#8217;<\/a> <a href=\"http:\/\/programmers.stackexchange.com\/a\/126420\">by<\/a> <a href=\"http:\/\/creativejs.com\/2011\/08\/recursion-see-recursion\/#comment-336\">some<\/a> &#8211; particular highlights include the ycombinator and the metacircular interpreter. \u00a0In Clojure you can find the following online:<\/p>\n<ul>\n<li><strong>Chapter 1 &#8211; Toys<\/strong>\u00a0&#8211;\u00a0<a href=\"https:\/\/github.com\/grinnbearit\/the-little-clojurer\/blob\/master\/src\/the_little_clojurer\/what_is_the_value_of_all_this.clj\">Sidhant Godiwala<\/a>\u00a0&#8211; \u00a0<a href=\"http:\/\/juliangamble.com\/blog\/2012\/07\/20\/the-little-schemer-in-clojure-chapter-1\/\">Julian Gamble<\/a><\/li>\n<li>Chapter 2 &#8211; Do it, Do It Again &#8211; <a href=\"https:\/\/github.com\/grinnbearit\/the-little-clojurer\/blob\/master\/src\/the_little_clojurer\/do_it_do_it_again_and_again_and_again.clj\">Sidhant Godiwala<\/a>\u00a0&#8211; \u00a0<a href=\"http:\/\/juliangamble.com\/blog\/2012\/07\/29\/the-little-schemer-in-clojure-chapter-2\/\">Julian Gamble<\/a>\u00a0&#8211; <a href=\"https:\/\/github.com\/emanon001\/The-Little-Schemer-in-Clojure\/blob\/master\/src\/the_little_schemer\/chapter_02.clj\">Emanon<\/a><\/li>\n<li>Chapter 3 &#8211; Cons the Magnificent &#8211; <a href=\"https:\/\/github.com\/grinnbearit\/the-little-clojurer\/blob\/master\/src\/the_little_clojurer\/cons_the_magnificent.clj\">Sidhant Godiwala<\/a>\u00a0&#8211; \u00a0<a href=\"http:\/\/juliangamble.com\/blog\/2012\/08\/03\/the-little-schemer-in-clojure-chapter-3\/\">Julian Gamble<\/a>\u00a0&#8211; <a href=\"https:\/\/github.com\/emanon001\/The-Little-Schemer-in-Clojure\/blob\/master\/src\/the_little_schemer\/chapter_03.clj\">Emanon<\/a><\/li>\n<li>Chapter 4 &#8211; Numbers Games &#8211; <a href=\"https:\/\/github.com\/grinnbearit\/the-little-clojurer\/blob\/master\/src\/the_little_clojurer\/numbers_games.clj\">Sidhant Godiwala<\/a>\u00a0&#8211; <a href=\"http:\/\/juliangamble.com\/blog\/2012\/08\/10\/the-little-schemer-in-clojure-chapter-4-numbers-games\/\">Julian Gamble<\/a>\u00a0&#8211; <a href=\"https:\/\/github.com\/emanon001\/The-Little-Schemer-in-Clojure\/blob\/master\/src\/the_little_schemer\/chapter_04.clj\">Emanon<\/a><\/li>\n<li>Chapter 5 &#8211; The Multichapter Chapter\u00a0&#8211; <a href=\"http:\/\/juliangamble.com\/blog\/2012\/08\/17\/the-little-schemer-in-clojure-chapter-5-the-multichapter-chapter\/\">Julian Gamble<\/a>\u00a0&#8211; <a href=\"https:\/\/github.com\/emanon001\/The-Little-Schemer-in-Clojure\/blob\/master\/src\/the_little_schemer\/chapter_05.clj\">Emanon<\/a><\/li>\n<li>Chapter 6 &#8211; *Oh My Gawd*: It&#8217;s Full of Stars\u00a0&#8211;\u00a0<a href=\"https:\/\/github.com\/grinnbearit\/the-little-clojurer\/blob\/master\/src\/the_little_clojurer\/oh_my_god_its_full_of_stars.clj\">Sidhant Godiwala<\/a>\u00a0&#8211; <a href=\"http:\/\/juliangamble.com\/blog\/2012\/08\/19\/the-little-schemer-in-clojure-chapter-6-oh-my-gawd-its-full-of-stars\/\">Julian Gamble<\/a>\u00a0&#8211; <a href=\"https:\/\/github.com\/emanon001\/The-Little-Schemer-in-Clojure\/blob\/master\/src\/the_little_schemer\/chapter_06.clj\">Emanon<\/a><\/li>\n<li>Chapter 7 &#8211; Shadows\u00a0&#8211; <a href=\"https:\/\/github.com\/grinnbearit\/the-little-clojurer\/blob\/master\/src\/the_little_clojurer\/shadows.clj\">Sidhant Godiwala<\/a>\u00a0&#8211; <a href=\"http:\/\/juliangamble.com\/blog\/2012\/08\/31\/the-little-schemer-in-clojure-chapter-7-shadows\/\">Julian Gamble<\/a>\u00a0&#8211; <a href=\"https:\/\/github.com\/emanon001\/The-Little-Schemer-in-Clojure\/blob\/master\/src\/the_little_schemer\/chapter_07.clj\">Emanon<\/a><\/li>\n<li>Chapter 8 &#8211; Friends and Relations\u00a0&#8211; <a href=\"https:\/\/github.com\/grinnbearit\/the-little-clojurer\/blob\/master\/src\/the_little_clojurer\/friends_and_relations.clj\">Sidhant Godiwala<\/a>\u00a0&#8211; <a href=\"http:\/\/juliangamble.com\/blog\/2012\/09\/07\/the-little-schemer-in-clojure-chapter-8-friends-and-relations\/\">Julian Gamble<\/a><\/li>\n<li>Chapter 9 &#8211; Lambda The Ultimate\u00a0&#8211; <a href=\"https:\/\/github.com\/grinnbearit\/the-little-clojurer\/blob\/master\/src\/the_little_clojurer\/lambda_the_ultimate.clj\">Sidhant Godiwala<\/a>\u00a0&#8211; <a href=\"http:\/\/juliangamble.com\/blog\/2012\/09\/15\/the-little-schemer-in-clojure-chapter-9-lambda-the-ultimate-deriving-the-y-combinator\/\">Julian Gamble<\/a><\/li>\n<li>Chapter 10 -What is the Value of All of This?\u00a0&#8211; <a href=\"https:\/\/github.com\/grinnbearit\/the-little-clojurer\/blob\/master\/src\/the_little_clojurer\/what_is_the_value_of_all_this.clj\">Sidhant Godiwala<\/a><\/li>\n<li><strong>Other References<\/strong> &#8211;\u00a0<a href=\"https:\/\/github.com\/midpeter444\/little-schemer\/blob\/master\/clojure\/littleclj.clj\">Michael Peterson Github<\/a><\/li>\n<\/ul>\n<h4><\/h4>\n<p><a href=\"http:\/\/www.gigamonkeys.com\/book\/\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-241\" title=\"PCLCover\" src=\"http:\/\/juliangamble.com\/blog\/wp-content\/uploads\/2012\/07\/PCLCover.png\" alt=\"\" width=\"186\" height=\"271\" \/><\/a><\/p>\n<h3>Practical Common LISP<\/h3>\n<p><a href=\"http:\/\/www.gigamonkeys.com\/book\/\">Practical Common Lisp<\/a> is the modern Common LISP Pickaxe &#8211; <a href=\"http:\/\/lambda-the-ultimate.org\/node\/2491#comment-38434\">the guys at ITA software hand this to grads to get them up to speed<\/a>. \u00a0 The guys at <a href=\"http:\/\/thinkrelevance.com\/blog\/2008\/09\/16\/pcl-clojure\">Relevance have spent some time<\/a> bringing this across:<\/p>\n<ul>\n<li><a href=\"http:\/\/blog.thinkrelevance.com\/2008\/9\/16\/pcl-clojure-chapter-3\">Chapter 3. Practical: A Simple Database<\/a><\/li>\n<li><a href=\"http:\/\/blog.thinkrelevance.com\/2008\/9\/16\/pcl-clojure-chapter-5\">Chapter 5. Functions<\/a><\/li>\n<li><a href=\"http:\/\/blog.thinkrelevance.com\/2008\/9\/16\/pcl-clojure-chapter-6\">Chapter 6. Variables<\/a><\/li>\n<li><a href=\"http:\/\/blog.thinkrelevance.com\/2008\/9\/18\/pcl-clojure-chapter-7\">Chapter 7. Macros: Standard Control Constructs<\/a><\/li>\n<li><a href=\"http:\/\/blog.thinkrelevance.com\/2008\/9\/23\/pcl-clojure-chapter-8\">Chapter 8. Macros: Defining Your Own<\/a><\/li>\n<li><a href=\"http:\/\/blog.thinkrelevance.com\/2008\/9\/24\/pcl-clojure-chapter-9\">Chapter 9. Practical: A Unit Test Framework<\/a><\/li>\n<li><a href=\"http:\/\/blog.thinkrelevance.com\/2008\/9\/19\/pcl-clojure-chapter-10\">Chapter 10. Numbers, Characters, and Strings<\/a><\/li>\n<li><a href=\"http:\/\/blog.thinkrelevance.com\/2008\/9\/22\/pcl-clojure-chapter-11\">Chapter 11. Collections<\/a><\/li>\n<li><a href=\"http:\/\/blog.thinkrelevance.com\/2008\/9\/25\/pcl-clojure-chapter-16\">Chapter 16. Object Reorientation: Generic Functions<\/a><\/li>\n<li><a href=\"http:\/\/blog.thinkrelevance.com\/2008\/9\/25\/pcl-clojure-chapter-17\">Chapter 17. Object Reorientation: Classes<\/a><\/li>\n<\/ul>\n<div><span style=\"font-size: 14px; line-height: 23px;\"><br \/>\n<\/span><\/div>\n<h3><a href=\"http:\/\/norvig.com\/paip.html\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-243\" title=\"PAIPCover\" src=\"http:\/\/juliangamble.com\/blog\/wp-content\/uploads\/2012\/07\/PAIPCover.png\" alt=\"\" width=\"202\" height=\"261\" \/><\/a>Paradigms of Artificial Intelligence Programming<\/h3>\n<p><a href=\"http:\/\/norvig.com\/paip.html\">PAIP<\/a> is a well known book that has aged well &#8211; and still remains a delight to flip through. The author <a href=\"http:\/\/norvig.com\/index.html\">Peter Norvig<\/a> has served as the head of Computational Science at NASA and is now Director of Research at Google. \u00a0The opportunities for the Clojure community here are wide open because this book has some amazing stuff. In Clojure it looks like this:<\/p>\n<ul>\n<li>Chapter 2 &#8211; A Simple Lisp Program &#8211;\u00a0<a href=\"http:\/\/kimavcrp.blogspot.com.au\/2012\/05\/porting-paip-to-clojure-chapter-2_29.html\">Maik Sch\u00fcnemann<\/a><\/li>\n<li>Chapter 4 &#8211; GPS: The General Problem Solver &#8211;\u00a0<a href=\"http:\/\/kimavcrp.blogspot.com.au\/2012\/06\/porting-paip-to-clojure-chapter-4-gps.html\">Maik Sch\u00fcnemann<\/a>\u00a0and <a href=\"http:\/\/www.fatvat.co.uk\/2009\/06\/general-problem-solver.html\">Jeff Foster<\/a> and <a href=\"http:\/\/www.fatvat.co.uk\/2009\/06\/generalizing-general-problem-solver.html\">Jeff Foster again<\/a><\/li>\n<li>Chapter 5 &#8211; ELIZA: Dialog with a Machine &#8211;\u00a0<a href=\"https:\/\/github.com\/karchie\/PAIP-in-Clojure\/blob\/master\/src\/main\/clojure\/paip\/eliza.clj\">Kevin Archie<\/a>\u00a0and <a href=\"https:\/\/github.com\/fffej\/ClojureProjects\/blob\/master\/ai\/uk\/co\/fatvat\/eliza.clj\">Jeff Foster<\/a><\/li>\n<li>Chapter 6 &#8211; Building Software Tools &#8211;\u00a0<a href=\"http:\/\/www.fatvat.co.uk\/2009\/07\/searching-graphs.html\">Jeff Foster<\/a>\u00a0and <a href=\"http:\/\/www.fatvat.co.uk\/2009\/07\/finding-target.html\">Jeff Foster again<\/a><\/li>\n<li>Chapter 7 &#8211; STUDENT: Solving Algebra Word Problems &#8211;\u00a0<a href=\"http:\/\/www.fatvat.co.uk\/2009\/07\/student.html\">Jeff Foster<\/a><\/li>\n<\/ul>\n<div><span style=\"font-size: 14px; line-height: 23px;\"><br \/>\n<\/span><\/div>\n<h3><a href=\"http:\/\/www.paulgraham.com\/onlisp.html\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft\" title=\"OnLisp\" src=\"http:\/\/juliangamble.com\/blog\/wp-content\/uploads\/2012\/07\/OnLisp.png\" alt=\"\" width=\"186\" height=\"271\" \/><\/a>On Lisp<\/h3>\n<p>Paul Graham has been an outstanding advocate and essayist for LISP, and many have explored LISP because of his writings. He&#8217;s also famous for his LISP startup Viaweb and it&#8217;s subsequent sale to Yahoo, plus his distinguished work in the YCombinator VC Fund. \u00a0One of his primary arguments in the essay &#8216;Beating the Averages&#8217; is that LISP helps programmers by being more expressive (more powerful) and the tool that LISP has that other languages don&#8217;t is macros. How do we learn about macros? Paul Graham wrote\u00a0<a href=\"http:\/\/www.paulgraham.com\/onlisp.html\">The Book on LISP macros<\/a>. Here is what it looks like in Clojure:<\/p>\n<ul>\n<li>Chapter 2 &#8211; Functions &#8211;\u00a0<a href=\"http:\/\/onbeyondlambda.blogspot.com.au\/2012\/02\/on-lisp-in-clojure-ch-2-21-23.html\">Rick Hall<\/a> &#8211; <a href=\"http:\/\/blog.fogus.me\/2008\/10\/02\/on-lisp-clojure-chapter-2-redux\/\">Michael Fogus<\/a><\/li>\n<li>Chapter 3 &#8211; Functional Programming &#8211;\u00a0<a href=\"http:\/\/onbeyondlambda.blogspot.com.au\/2012\/03\/on-lisp-in-clojure-ch-3.html\">Rick Hall<\/a> &#8211; <a href=\"http:\/\/blog.fogus.me\/2008\/09\/30\/on-lisp-clojure-chapter-3\/\">Michael Fogus<\/a><\/li>\n<li>Chapter 4 &#8211; Utility Functions &#8211;\u00a0<a href=\"http:\/\/onbeyondlambda.blogspot.com.au\/2012\/03\/on-lisp-in-clojure-ch-4-41-to-43.html\">Rick Hall<\/a> &#8211; <a href=\"http:\/\/blog.fogus.me\/2008\/10\/08\/on-lisp-clojure-chapter-4\/\">Michael Fogus<\/a><\/li>\n<li>Chapter 5 &#8211; Returning Functions &#8211; \u00a0<a href=\"http:\/\/onbeyondlambda.blogspot.com.au\/2012\/04\/on-lisp-in-clojure-ch-5.html\">Rick Hall<\/a> &#8211; <a href=\"http:\/\/blog.fogus.me\/2008\/10\/24\/on-lisp-clojure-chapter-5\/\">Michael Fogus<\/a><\/li>\n<li>Chapter 6 &#8211; Functions as Representation &#8211;\u00a0<a href=\"http:\/\/onbeyondlambda.blogspot.com.au\/2012\/04\/on-lisp-in-clojure-chapter-6.html\">Rick Hall<\/a><\/li>\n<li>Chapter 7 &#8211; Macros &#8211;\u00a0<a href=\"http:\/\/onbeyondlambda.blogspot.com.au\/2012\/04\/on-lisp-in-clojure-chapter-7-71-74.html\">Rick Hall<\/a> &#8211;\u00a0<a href=\"http:\/\/blog.thinkrelevance.com\/2008\/12\/12\/on-lisp-clojure-chapter-7\">Stuart Halloway<\/a><\/li>\n<li>Chapter 8 &#8211; When to Use Macros &#8211; <a href=\"http:\/\/onbeyondlambda.blogspot.com.au\/2012\/05\/on-lisp-in-clojure-chapter-8.html\">Rick Hall<\/a><\/li>\n<li>Chapter 9 &#8211; Variable Capture &#8211;\u00a0<a href=\"http:\/\/onbeyondlambda.blogspot.com.au\/2012\/05\/on-lisp-in-clojure-chapter-9.html\">Rick Hall<\/a> &#8211;\u00a0<a href=\"http:\/\/thinkrelevance.com\/blog\/2008\/12\/17\/on-lisp-clojure-chapter-9\">Stuart Halloway<\/a><\/li>\n<li>Chapter 10 &#8211; Other Macro Pitfalls &#8211;\u00a0<a href=\"http:\/\/onbeyondlambda.blogspot.com.au\/2012\/05\/on-lisp-in-clojure-chapter-10.html\">Rick Hall<\/a> &#8211;\u00a0<a href=\"http:\/\/thinkrelevance.com\/blog\/2008\/12\/21\/on-lisp-clojure-chapter-10\">Stuart Halloway<\/a><\/li>\n<li>Chapter 11 &#8211; Classic Macros &#8211;\u00a0<a href=\"http:\/\/onbeyondlambda.blogspot.com.au\/2012\/05\/on-lisp-in-clojure-chapter-11-section.html\">Rick Hall<\/a><\/li>\n<li>Other References &#8211; <a href=\"https:\/\/github.com\/rickhall2000\/OnLisp\/tree\/master\/src\">Rick Hall Github<\/a><\/li>\n<\/ul>\n<h3>Lisp In Small Pieces<\/h3>\n<p><a href=\"http:\/\/juliangamble.com\/blog\/wp-content\/uploads\/2012\/07\/Lisp-In-Small-Pieces.jpeg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-535\" src=\"http:\/\/juliangamble.com\/blog\/wp-content\/uploads\/2012\/07\/Lisp-In-Small-Pieces.jpeg\" alt=\"Lisp In Small Pieces\" width=\"128\" height=\"182\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.amazon.com\/Lisp-Small-Pieces-Christian-Queinnec\/dp\/0521545668\">Lisp In Small Pieces<\/a> is a wonderful book by Christian Queinnec. Lots of people have written a LISP interpreter. The author writes eleven interpreters and two compilers.<\/p>\n<p>The opportunities for this to be ported to Clojure are wide open &#8211; and work has only just begun:<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Ch 1: The Basics of Interpretation &#8211; <a href=\"https:\/\/gist.github.com\/fogus\/3354936\">Michael Fogus<\/a>, <a href=\"https:\/\/gist.github.com\/gmorpheme\/9293548\">Greg Hawkins<\/a><\/li>\n<li>Ch 2: Lisp 1, 2&#8230; &#8211; <a href=\"https:\/\/gist.github.com\/gmorpheme\/10018564\">Greg Hawkins<\/a><\/li>\n<li>Ch 3. Escape &amp; Return: Continuations \u00a0&#8211;\u00a0<a href=\"http:\/\/gmorpheme.net\/lisp-in-small-pieces-of-clojure-part-3.html\">Greg Hawkins<\/a>, <a href=\"http:\/\/git.slothrop.net\/#small-pieces-3\">Andrew Cowper<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3>Structure and Interpretation of Computer Programs &#8211; SICP<\/h3>\n<ul>\n<li>SICP Distilled &#8211; <a href=\"http:\/\/www.sicpdistilled.com\/\">Tommy Hall<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><strong>Updated 25 May 2013<\/strong><\/p>\n<ul>\n<li><span style=\"line-height: 14px;\">As discussed on <a href=\"https:\/\/news.ycombinator.com\/item?id=5761983\">Hacker News<\/a><\/span><\/li>\n<li>As discussed on <a href=\"http:\/\/www.reddit.com\/r\/Clojure\/comments\/1eypje\/lisp_books_living_again_in_clojure\/\">Reddit<\/a><\/li>\n<li><a href=\"https:\/\/twitter.com\/peterseibel\/status\/342385176833306624\">This reaction from Peter Seibel<\/a> was priceless!<\/li>\n<\/ul>\n<p><a href=\"http:\/\/juliangamble.com\/blog\/wp-content\/uploads\/2012\/07\/Screen-Shot-2013-08-23-at-9.42.51-PM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-523\" src=\"http:\/\/juliangamble.com\/blog\/wp-content\/uploads\/2012\/07\/Screen-Shot-2013-08-23-at-9.42.51-PM.png\" alt=\"Peter Siebel Reaction\" width=\"340\" height=\"221\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The LISP family of languages has a rich heritage, with some epic tomes gracing Computer Science history (and our shelves) over the years. \u00a0Clojure is the latest entrant in the LISP family, bringing concurrency advances and the richness of the &hellip; <a href=\"https:\/\/juliangamble.com\/blog\/2012\/07\/13\/amazing-lisp-books-living-again-in-clojure\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"image","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-234","post","type-post","status-publish","format-image","hentry","category-clojure","post_format-post-format-image"],"_links":{"self":[{"href":"https:\/\/juliangamble.com\/blog\/wp-json\/wp\/v2\/posts\/234","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/juliangamble.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/juliangamble.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/juliangamble.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/juliangamble.com\/blog\/wp-json\/wp\/v2\/comments?post=234"}],"version-history":[{"count":37,"href":"https:\/\/juliangamble.com\/blog\/wp-json\/wp\/v2\/posts\/234\/revisions"}],"predecessor-version":[{"id":812,"href":"https:\/\/juliangamble.com\/blog\/wp-json\/wp\/v2\/posts\/234\/revisions\/812"}],"wp:attachment":[{"href":"https:\/\/juliangamble.com\/blog\/wp-json\/wp\/v2\/media?parent=234"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/juliangamble.com\/blog\/wp-json\/wp\/v2\/categories?post=234"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/juliangamble.com\/blog\/wp-json\/wp\/v2\/tags?post=234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}