{"id":337,"date":"2018-11-04T12:23:25","date_gmt":"2018-11-04T12:23:25","guid":{"rendered":"https:\/\/books.compclassnotes.com\/elementarycomputing\/?page_id=337"},"modified":"2018-11-29T15:00:11","modified_gmt":"2018-11-29T15:00:11","slug":"lambda-calculus","status":"publish","type":"page","link":"https:\/\/books.compclassnotes.com\/elementarycomputing\/lambda-calculus\/","title":{"rendered":"Lambda Calculus"},"content":{"rendered":"<p>Lambda Calculus adds some extra machinery to expressions to let them take parameters.<\/p>\n<p>Here&#8217;s a simple example:<\/p>\n<div id=\"attachment_338\" style=\"width: 608px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-338\" class=\" wp-image-338\" src=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/00-Intro.png\" alt=\"\" width=\"598\" height=\"199\" srcset=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/00-Intro.png 1048w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/00-Intro-300x100.png 300w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/00-Intro-768x256.png 768w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/00-Intro-1024x341.png 1024w\" sizes=\"auto, (max-width: 598px) 100vw, 598px\" \/><p id=\"caption-attachment-338\" class=\"wp-caption-text\">Lambda Expression Overview<\/p><\/div>\n<p>The\u00a0\u03bb tells us that this is an expression that has\u00a0<em>at least<\/em> one parameter, then we have the name, then a period (.) to indicate that we have got to the end of the list of parameters and, finally, we have the\u00a0<em>body<\/em> of the expression, which is the action we should take. What we have here is a\u00a0<strong>function<\/strong>, a reusable piece of code. All\u00a0\u03bb expressions are functions and the two terms are often used interchangeably. Notice though that these functions don&#8217;t have any names &#8211; that doesn&#8217;t make them very reusable, but that&#8217;s something we&#8217;ll worry about a bit later on. For now, let&#8217;s just use them without names.<\/p>\n<div id=\"attachment_340\" style=\"width: 782px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-340\" class=\" wp-image-340\" src=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/01a-intro.png\" alt=\"\" width=\"772\" height=\"282\" srcset=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/01a-intro.png 1522w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/01a-intro-300x110.png 300w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/01a-intro-768x281.png 768w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/01a-intro-1024x374.png 1024w\" sizes=\"auto, (max-width: 772px) 100vw, 772px\" \/><p id=\"caption-attachment-340\" class=\"wp-caption-text\">A lambda expression as an AST. On the right, the same lambda expression with the key parts highlighted.<\/p><\/div>\n<p>Notice we still have an AST, noted as the\u00a0<em>function body\u00a0<\/em>on the right hand side, it is just below the\u00a0\u03bb, which has the parameter name (X) as its other child. Then, inside the body we have the variable name (X). When a value gets passed to the parameter, it will replace the variable, meaning that we will be able to evaluate the AST.<\/p>\n<p>This means we really have two different kinds of expressions. The first is a\u00a0<em>reducible expression<\/em> or\u00a0<em>redex<\/em> for short. This is an expression that can be made simpler. For example,\u00a0<strong>(+ 2 1)<\/strong> can be reduced to 3. The other type is referred to simply as an expression as\u00a0\u03bb expression (or function), and can&#8217;t be simplified &#8212; yet, because it is missing some information. Consider this example\u00a0<strong>(\u03bbx. + 1 x)<\/strong>.The information we&#8217;re missing is what value should be passed in for\u00a0<strong>x<\/strong>; how do we resolve this? We give it a value, like this:<\/p>\n<p><strong>((\u03bbx. + 1 x) 5)<\/strong><\/p>\n<p>Now we have enough information, because we can pass 5 into the parameter, and variable in the body of the expression gets replaced with 5, giving us:<\/p>\n<p><strong>(+ 1 5<\/strong><strong>)<\/strong><\/p>\n<p>It&#8217;s nice and easy from here, as this is just a straightforward prefix expression, and we&#8217;re already experts at evaluating (reducing, as we call it now) those.<\/p>\n<p>Let&#8217;s run through some more examples:<\/p>\n<p><strong>((\u03bby. * y 5) 2)<\/strong><\/p>\n<p><strong>(* 2 5)<\/strong><\/p>\n<p><strong>10<\/strong><\/p>\n<p>How about this one with two variables?<\/p>\n<p><strong>((\u03bbxy. + x y) 2 3)<\/strong><\/p>\n<p>First off, how do we know that there are two variables and not one variable called\u00a0<strong>xy<\/strong>? We know because in\u00a0\u03bb calculus all variables just have a single letter. To evaluate this, we bring them into the expression in the same order they appear in the list, so\u00a0<strong>x<\/strong> gets the value 2 and\u00a0<strong>y\u00a0<\/strong>gets the value 3. This is called a\u00a0<strong><span class=\"s1\">\u03b2<\/span><\/strong><span class=\"s2\"> (<b>beta) reduction<\/b>; we&#8217;ll come back to that name later on, but it&#8217;s just a way of formally describing what we&#8217;ve done. In the meantime let&#8217;s look at some more examples. How about this?<\/span><\/p>\n<p><strong>((\u03bbxy. * y x) 2)<\/strong><\/p>\n<p>Is this a redex? After all, it doesn&#8217;t have enough arguments: it needs two but we&#8217;ve only given it one. Remember, what makes an expression reducible is the fact that it can be simplified, and we can simplify this performing a\u00a0<span class=\"s1\">\u03b2-reduction on it and bringing in the 2 for x to get:<\/span><\/p>\n<p><strong>(\u03bby. * y 2)<\/strong><\/p>\n<p>And that&#8217;s as far as we can go, because we now need to wait to get a value for\u00a0<strong>y<\/strong>.<\/p>\n<p>What happens if the argument itself is a redex? Say we had:<\/p>\n<p><strong>((\u03bbx. + 3 x) (+ 2 3))<\/strong><\/p>\n<p>Usually we will evaluate the argument first, so we have this:<\/p>\n<p><strong>((\u03bbx. + 3 x) 5)<\/strong><\/p>\n<p>Next we bring in the 5 and then get our answer of 8, that is, <strong>(+ 3 5)<\/strong>. However, this won&#8217;t always be the case, and sometimes we will bring the argument in unchanged. In this example, the final answer will be the same because we get this:<\/p>\n<p><strong>( + 3 (+ 2 3))<\/strong><\/p>\n<p>which becomes\u00a0<strong>(+ 3 5)<\/strong>. There are some scenarios where this won&#8217;t be the case, though, but we&#8217;ll worry about those a bit later. For now, let&#8217;s draw some ASTs based on the sorts of expressions we&#8217;ve been looking at.<\/p>\n<div id=\"attachment_344\" style=\"width: 907px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-344\" class=\" wp-image-344\" src=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/02-AST.png\" alt=\"\" width=\"897\" height=\"353\" srcset=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/02-AST.png 1533w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/02-AST-300x118.png 300w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/02-AST-768x302.png 768w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/02-AST-1024x403.png 1024w\" sizes=\"auto, (max-width: 897px) 100vw, 897px\" \/><p id=\"caption-attachment-344\" class=\"wp-caption-text\">A more complex lambda expression as an AST, this time with two parameters. On the right, the same lambda expression with the key parts highlighted.<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>Now things are starting get a bit more complex, especially once we start passing in other expressions as arguments. We&#8217;ll need to know what order to evaluate things in and, for the time being, we will evaluate the\u00a0<strong>innermost<\/strong> redex first, that is, the\u00a0<em>most deeply nested and furthest to the\u00a0<strong>right<\/strong>.<\/em><\/p>\n<p>Consider this one:<\/p>\n<p><strong>((\u03bbx. x) (+ 1 1))<\/strong><\/p>\n<p>The two expressions are at the same depth, but\u00a0<strong>(+ 1 1)<\/strong> is further to the right, so that&#8217;s the one we that we will evaluate first. What this means for ASTs is that we need some way to connect these two expressions. After all, we know that separately they look like this:<\/p>\n<div id=\"attachment_346\" style=\"width: 530px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-346\" class=\"size-full wp-image-346\" src=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/03-application.png\" alt=\"\" width=\"520\" height=\"197\" srcset=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/03-application.png 520w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/03-application-300x114.png 300w\" sizes=\"auto, (max-width: 520px) 100vw, 520px\" \/><p id=\"caption-attachment-346\" class=\"wp-caption-text\">Two ASTs, one of which needs to be passed as an argument to the other.<\/p><\/div>\n<p>What we need is a way to show that not only are they connected, but how they are connected. In particular, that the\u00a0<strong>(+ 1 1)<\/strong> AST is being passed into\u00a0<strong>(\u03bbx. x)<\/strong>. In fact, we say that\u00a0<strong>(\u03bbx. x)\u00a0<\/strong>is being\u00a0<em>applied<\/em> to\u00a0<strong>(+ 1 1)<\/strong>, because\u00a0<strong>(\u03bbx. x)\u00a0<\/strong>is a function. We indicate this with another node, @ (application) that joins the two together, like this:<\/p>\n<div id=\"attachment_345\" style=\"width: 479px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-345\" class=\"size-full wp-image-345\" src=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/04-application.png\" alt=\"\" width=\"469\" height=\"250\" srcset=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/04-application.png 469w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/04-application-300x160.png 300w\" sizes=\"auto, (max-width: 469px) 100vw, 469px\" \/><p id=\"caption-attachment-345\" class=\"wp-caption-text\">The same ASTs, this time connected with an @ (application) node, showing clearly how they are connected.<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>Let&#8217;s work through some examples. Here we have <strong>((\u03bbx. + 1 x) 3):<\/strong><\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_368\" style=\"width: 453px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-368\" class=\" wp-image-368\" src=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/05-Application.png\" alt=\"\" width=\"443\" height=\"345\" srcset=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/05-Application.png 876w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/05-Application-300x234.png 300w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/05-Application-768x598.png 768w\" sizes=\"auto, (max-width: 443px) 100vw, 443px\" \/><p id=\"caption-attachment-368\" class=\"wp-caption-text\">An AST with an application node.<\/p><\/div>\n<p>The @ on top tells us that we&#8217;re going to\u00a0<em>apply\u00a0<\/em>a\u00a0\u03bb expression to 3, and the\u00a0\u00a0\u03bb expression tells us that we&#8217;re going to take one parameter and replace the\u00a0<strong>x<\/strong> in the body with the value we get for it. Let&#8217;s bring in that 3 and replace the\u00a0<strong>x<\/strong>:<\/p>\n<div id=\"attachment_369\" style=\"width: 203px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-369\" class=\" wp-image-369\" src=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/06-Application.png\" alt=\"\" width=\"193\" height=\"140\" srcset=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/06-Application.png 472w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/06-Application-300x217.png 300w\" sizes=\"auto, (max-width: 193px) 100vw, 193px\" \/><p id=\"caption-attachment-369\" class=\"wp-caption-text\">The AST after bringing in 3 for X.<\/p><\/div>\n<p>This is just a simple AST! We&#8217;ve already evaluated far more complex ones that this. This is one of the great things about\u00a0\u00a0\u03bb calculus: if you drill down into it, we have very simple ASTs at the lowest level. Each extra layer, such as the\u00a0\u00a0\u03bb node and the @ node add some extra functionality but they don&#8217;t change the fundamentals.<\/p>\n<p>Here&#8217;s a slightly more complex example that has two parameters\u00a0<strong>((\u03bbxy. + y x) 1 2)<\/strong>:<\/p>\n<div id=\"attachment_370\" style=\"width: 385px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-370\" class=\" wp-image-370\" src=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/07-application.png\" alt=\"\" width=\"375\" height=\"231\" srcset=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/07-application.png 1130w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/07-application-300x185.png 300w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/07-application-768x473.png 768w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/07-application-1024x631.png 1024w\" sizes=\"auto, (max-width: 375px) 100vw, 375px\" \/><p id=\"caption-attachment-370\" class=\"wp-caption-text\">A function with two parameters applied to two arguments<\/p><\/div>\n<p>This time we take the arguments into the function <em>in order<\/em>, that is, in the same order they are presented to the function, so\u00a0<strong>x<\/strong> gets 1 and\u00a0<strong>y\u00a0<\/strong>gets 2, giving us the following AST:<\/p>\n<div id=\"attachment_371\" style=\"width: 189px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-371\" class=\" wp-image-371\" src=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/08-application.png\" alt=\"\" width=\"179\" height=\"129\" srcset=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/08-application.png 482w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/08-application-300x217.png 300w\" sizes=\"auto, (max-width: 179px) 100vw, 179px\" \/><p id=\"caption-attachment-371\" class=\"wp-caption-text\">The expression with the two values brought in<\/p><\/div>\n<p>So, we have three parts to any of these sorts of expressions, we have the function body, that actually does the work, the\u00a0\u03bb expression, that attaches a parameter list to the function body so that we can supply arguments, and finally, we then apply this to some sort of argument. The following expression\u00a0<strong>((\u03bbx. + 1 x) (+ 4 5))\u00a0<\/strong>takes the argument\u00a0<strong>(+ 4 5)\u00a0<\/strong>and passes it to a function that adds 1 to it:<\/p>\n<div id=\"attachment_372\" style=\"width: 403px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-372\" class=\" wp-image-372\" src=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/09-application.png\" alt=\"\" width=\"393\" height=\"248\" srcset=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/09-application.png 1668w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/09-application-300x189.png 300w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/09-application-768x484.png 768w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/09-application-1024x646.png 1024w\" sizes=\"auto, (max-width: 393px) 100vw, 393px\" \/><p id=\"caption-attachment-372\" class=\"wp-caption-text\">The three key parts to an AST with an application node: The body (red triangle); the lambda part (blue triangle) which defines the function; and the application (green triangle) which actually supplies arguments to a function<\/p><\/div>\n<p>To evaluate this, we first evaluate the argument &#8212; remember, we evaluate the rightmost innermost first:<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_373\" style=\"width: 349px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-373\" class=\" wp-image-373\" src=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/10-application.png\" alt=\"\" width=\"339\" height=\"250\" srcset=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/10-application.png 968w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/10-application-300x221.png 300w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/10-application-768x566.png 768w\" sizes=\"auto, (max-width: 339px) 100vw, 339px\" \/><p id=\"caption-attachment-373\" class=\"wp-caption-text\">Evaluate the arguments first<\/p><\/div>\n<p>Then we replace the\u00a0<strong>x<\/strong> in the function body to give us this:<\/p>\n<div id=\"attachment_374\" style=\"width: 221px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-374\" class=\" wp-image-374\" src=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/11-application.png\" alt=\"\" width=\"211\" height=\"167\" srcset=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/11-application.png 428w, https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-content\/uploads\/sites\/9\/2018\/11\/11-application-300x237.png 300w\" sizes=\"auto, (max-width: 211px) 100vw, 211px\" \/><p id=\"caption-attachment-374\" class=\"wp-caption-text\">The resulting subtree<\/p><\/div>\n<p>Take a look at some examples below, which are followed by some practice questions.<\/p>\n\n<!-- iframe plugin v.6.0 wordpress.org\/plugins\/iframe\/ -->\n<iframe loading=\"lazy\" src=\"https:\/\/my.compclassnotes.com\/canonical\/connor\/lambda\" width=\"100%\" height=\"1280\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"yes\" class=\"iframe-class\" frameborder=\"0\"><\/iframe>\n\n<p>Some practice questions on ASTs with\u00a0\u03bb:<\/p>\n\n<!-- iframe plugin v.6.0 wordpress.org\/plugins\/iframe\/ -->\n<iframe loading=\"lazy\" src=\"https:\/\/my.compclassnotes.com\/modules\/4016\/practice\/embed\" width=\"100%\" height=\"1280\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"yes\" class=\"iframe-class\" frameborder=\"0\"><\/iframe>\n\n<hr \/>\n<p><a href=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/\">Back to index.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lambda Calculus adds some extra machinery to expressions to let them take parameters. Here&#8217;s a simple example: The\u00a0\u03bb tells us that this is an expression that has\u00a0at least one parameter, then we have the name, then a period (.) to <span class=\"readmore\"><a href=\"https:\/\/books.compclassnotes.com\/elementarycomputing\/lambda-calculus\/\">Continue Reading<\/a><\/span><\/p>\n","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-337","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-json\/wp\/v2\/pages\/337","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-json\/wp\/v2\/comments?post=337"}],"version-history":[{"count":9,"href":"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-json\/wp\/v2\/pages\/337\/revisions"}],"predecessor-version":[{"id":587,"href":"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-json\/wp\/v2\/pages\/337\/revisions\/587"}],"wp:attachment":[{"href":"https:\/\/books.compclassnotes.com\/elementarycomputing\/wp-json\/wp\/v2\/media?parent=337"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}