{"action":"created","comment":{"url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/pulls/comments/79190081","id":79190081,"diff_hunk":"@@ -0,0 +1,513 @@\n+---\n+language: Logtalk\n+contributors:\n+    - [\"Paulo Moura\", \"http://github.com/pmoura\"]\n+filename: learnlogtalk.lgt\n+---\n+\n+Logtalk is an object-oriented logic programming language that extends and leverages Prolog with modern code encapsulation and code reuse mechanisms without compromising its declarative programming features. Logtalk is implemented in highly portable code and can use most modern and standards compliant Prolog implementations as a back-end compiler.\n+\n+To keep its size reasonable, this tutorial necessarily assumes that the reader have a working knowledge of Prolog and is biased towards describing Logtalk object-oriented features.\n+\n+# Syntax\n+\n+Logtalk uses standard Prolog syntax with the addition of a few operators and directives for a smooth learning curve and wide portability. One important consequence is that Prolog code can be easily encapsulated in objects with little or no changes. Moreover, Logtalk can transparently interpret most Prolog modules as Logtalk objects.\n+\n+Some of the most important operators are:\n+\n+* `::/2` - sending a message to an object\n+* `::/1` - sending a message to _self_ (i.e. to the object that received the message being processed)\n+* `^^/1` - _super_ call (of an inherited or imported predicate)\n+\n+* `<</2` - debugging context switch call (allows calling a predicate from within an object)\n+\n+Some of the most important entity and predicate directives will be introduced in the next sections.\n+\n+# Entities and roles\n+\n+Logtalk provides _objects_, _protocols_, and _categories_ as first-class entities. Relations between entities define _patterns of code reuse_ and the _roles_ played by the entities. For example, when an object _instantiates_ another object, the first object plays the role of an instance and the second object plays the role of a class. An _extends_ relation between two objects implies that both objects play the role of prototypes, with one of them extending the other, its parent prototype.\n+\n+# Defining an object\n+\n+An object encapsulates predicate declarations and definitions. Objects can be created dynamically but are usually static and defined in source files. A single source file can contain any number of entity definitions. A  simple object, defining a list member public predicate:\n+\n+```logtalk\n+:- object(list).\n+\n+\t:- public(member/2).\n+\tmember(Head, [Head| _]).\n+\tmember(Head, [_| Tail]) :-\n+\t\tmember(Head, Tail).\n+\n+:- end_object.\n+```\n+\n+# Compiling source files\n+\n+Assuming that the code above for the `list` object is saved in a `list.lgt` file, it can be compiled and loaded using the `logtalk_load/1` built-in predicates or its abbreviation, `{}/1`, with the file path as argument (the extension can be omitted):\n+\n+```logtalk\n+?- {list}.\n+yes\n+```\n+\n+# Sending a message to an object\n+\n+The `::/2` infix operator is used to send a message to an object. As in Prolog, we can backtrack for alternative solutions:\n+\n+```logtalk\n+?- list::member(X, [1,2,3]).\n+X = 1 ;\n+X = 2 ;\n+X = 3\n+yes\n+```\n+\n+Encapsulation is enforced. A predicate can be declared _public_, _protected_, or _private_. It can also be _local_ when there is no scope directive for it. For example:\n+\n+```logtalk\n+:- object(scopes).\n+\n+\t:- private(bar/0).\n+\tbar.\n+\n+\tlocal.\n+\n+:- end_object.\n+```\n+\n+Assuming the object is saved in a `scopes.lgt` file:\n+\n+```logtalk\n+?- {scopes}.\n+yes\n+\n+?- scopes::bar.\n+error(permission_error(access,private_predicate,bar/0),logtalk(scopes::bar,user))\n+\n+?- scopes::local.\n+error(existence_error(predicate_declaration,local/0),logtalk(scopes::local,user))\n+```\n+\n+# Defining and implementing a protocol\n+\n+Protocols contain predicate declarations that can be implemented by objects and categories:\n+\n+```logtalk\n+:- protocol(listp).\n+\n+\t:- public(member/2).\n+\n+:- end_protocol.\n+\n+:- object(list,\n+\timplements(listp)).\n+\n+\tmember(Head, [Head| _]).\n+\tmember(Head, [_| Tail]) :-\n+\t\tmember(Head, Tail).\n+\n+:- end_object.\n+```\n+\n+The scope of the protocol predicates can be restricted using protected or private implementation. For example:\n+\n+```logtalk\n+:- object(stack,\n+\timplements(private::listp)).\n+\n+:- end_object.\n+```\n+\n+In fact, all entity relations can be qualified as public (the default), protected, or private.\n+\n+# Prototypes\n+\n+An object without an  _instantiation_ or _specialization_ relation with another object plays the role of a prototype. A prototype can _extend_ another object, its parent prototype.\n+\n+```logtalk\n+% clyde, our prototypical elephant\n+:- object(clyde).\n+\n+\t:- public(color/1).\n+\tcolor(grey).\n+\n+\t:- public(number_of_legs/1).\n+\tnumber_of_legs(4).\n+\n+:- end_object.\n+\n+% fred, another elephant, is like clyde, except that he's white\n+:- object(fred,\n+\textends(clyde)).\n+\n+\tcolor(white).\n+\n+:- end_object.\n+```\n+\n+When answering a message sent to an object playing the role of a prototype, we validate the message and look for an answer first in the prototype itself and, if not found, we delegate to the prototype parents if any:\n+\n+```logtalk\n+?- fred::number_of_legs(N).\n+N = 4\n+yes\n+\n+?- fred::color(C).\n+C = white\n+yes\n+```\n+\n+A message is valid if the corresponding predicate is declared (and the sender is within scope) but it will fail, rather then throwing an error, if the predicate is not defined. This is called the _closed-world assumption_. For example, consider the following object, saved in a `foo.lgt` file:\n+\n+```logtalk\n+:- object(foo).\n+\n+\t:- public(bar).\n+\n+:- end_object.\n+```\n+\n+Loading the file and trying to call the `bar/0` predicate fails as expected. Note that this is different from calling an _unknown_ predicate, which results in an error:\n+\n+```logtalk\n+?- {foo}.\n+yes\n+\n+?- foo::bar.\n+no\n+\n+?- catch(foo::baz, Error, true).\n+Error = error(\n+\texistence_error(predicate_declaration,baz/0), logtalk(foo::baz,user)\n+).\n+```\n+\n+# Classes and instances\n+\n+In order to define objects playing the role of classes and/or instances, an object must have at least an instantiation or a specialization relation with another object. Objects playing the role of meta-classes can be used when we need to see a class also as an instance. We use the following example to also illustrate how to dynamically create new objects at runtime:\n+\n+```logtalk\n+% a simple, generic, meta-class defining a new/2 predicate for its instances\n+:- object(class,\n+\tinstantiates(class)).\n+\n+\t:- public(new/2).\n+\tnew(Instance, Clauses) :-\n+\t\tself(Class),\n+\t\tcreate_object(Instance, [instantiates(Class)], [], Clauses).\n+\n+:- end_object.\n+\n+% a simple class defining person attributes\n+:- object(person,\n+\tinstantiates(class)).\n+\n+\t:- public([\n+\t\tage/1, name/1\n+\t]).\n+\n+\t% a default value for age/1\n+\tage(42).\n+\n+:- end_object.","path":"logtalk.html.markdown","position":213,"original_position":213,"commit_id":"d0647362f6ea297bbeeaf46c964e79e6a4ba8340","original_commit_id":"d0647362f6ea297bbeeaf46c964e79e6a4ba8340","user":{"login":"pmoura","id":294478,"avatar_url":"https://avatars.githubusercontent.com/u/294478?v=3","gravatar_id":"","url":"https://api.github.com/users/pmoura","html_url":"https://github.com/pmoura","followers_url":"https://api.github.com/users/pmoura/followers","following_url":"https://api.github.com/users/pmoura/following{/other_user}","gists_url":"https://api.github.com/users/pmoura/gists{/gist_id}","starred_url":"https://api.github.com/users/pmoura/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pmoura/subscriptions","organizations_url":"https://api.github.com/users/pmoura/orgs","repos_url":"https://api.github.com/users/pmoura/repos","events_url":"https://api.github.com/users/pmoura/events{/privacy}","received_events_url":"https://api.github.com/users/pmoura/received_events","type":"User","site_admin":false},"body":"You get an error. `person` plays the role of class and, as such, declares the predicates `name/1` and `age/1` for its instances. It doesn't define those predicates for itself. Note also that the meta-class of `person` only declares (and defines) a `new/2` predicate, which thus is the only valid message to `person`.\r\n\r\nYou can trust that all code examples in the tutorial are correct (I'm the author of the Logtalk programming language). ","created_at":"2016-09-16T15:14:19Z","updated_at":"2016-09-16T15:14:19Z","html_url":"https://github.com/adambard/learnxinyminutes-docs/pull/2374#discussion_r79190081","pull_request_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/pulls/2374","_links":{"self":{"href":"https://api.github.com/repos/adambard/learnxinyminutes-docs/pulls/comments/79190081"},"html":{"href":"https://github.com/adambard/learnxinyminutes-docs/pull/2374#discussion_r79190081"},"pull_request":{"href":"https://api.github.com/repos/adambard/learnxinyminutes-docs/pulls/2374"}}},"pull_request":{"url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/pulls/2374","id":85538309,"html_url":"https://github.com/adambard/learnxinyminutes-docs/pull/2374","diff_url":"https://github.com/adambard/learnxinyminutes-docs/pull/2374.diff","patch_url":"https://github.com/adambard/learnxinyminutes-docs/pull/2374.patch","issue_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/issues/2374","number":2374,"state":"open","locked":false,"title":"[logtalk/en] Initial version of the Logtalk language tutorial","user":{"login":"pmoura","id":294478,"avatar_url":"https://avatars.githubusercontent.com/u/294478?v=3","gravatar_id":"","url":"https://api.github.com/users/pmoura","html_url":"https://github.com/pmoura","followers_url":"https://api.github.com/users/pmoura/followers","following_url":"https://api.github.com/users/pmoura/following{/other_user}","gists_url":"https://api.github.com/users/pmoura/gists{/gist_id}","starred_url":"https://api.github.com/users/pmoura/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pmoura/subscriptions","organizations_url":"https://api.github.com/users/pmoura/orgs","repos_url":"https://api.github.com/users/pmoura/repos","events_url":"https://api.github.com/users/pmoura/events{/privacy}","received_events_url":"https://api.github.com/users/pmoura/received_events","type":"User","site_admin":false},"body":"- [x] PR touches only one file (or a set of logically related files with similar changes made)\r\n- [x] Content changes are aimed at *intermediate to experienced programmers* (this is a poor format for explaining fundamental programming concepts)\r\n- [x] YAML Frontmatter formatted according to [CONTRIBUTING.md](https://github.com/adambard/learnxinyminutes-docs/blob/master/CONTRIBUTING.markdown)\r\n- [x] Seriously, look at it now. Watch for quotes and double-check field names.\r\n\r\n","created_at":"2016-09-16T08:53:15Z","updated_at":"2016-09-16T15:14:19Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3b680ae78f7d8a3ac888ceda7f6bc95f504ba27e","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/pulls/2374/commits","review_comments_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/pulls/2374/comments","review_comment_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/issues/2374/comments","statuses_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/statuses/d0647362f6ea297bbeeaf46c964e79e6a4ba8340","head":{"label":"LogtalkDotOrg:master","ref":"master","sha":"d0647362f6ea297bbeeaf46c964e79e6a4ba8340","user":{"login":"LogtalkDotOrg","id":2140053,"avatar_url":"https://avatars.githubusercontent.com/u/2140053?v=3","gravatar_id":"","url":"https://api.github.com/users/LogtalkDotOrg","html_url":"https://github.com/LogtalkDotOrg","followers_url":"https://api.github.com/users/LogtalkDotOrg/followers","following_url":"https://api.github.com/users/LogtalkDotOrg/following{/other_user}","gists_url":"https://api.github.com/users/LogtalkDotOrg/gists{/gist_id}","starred_url":"https://api.github.com/users/LogtalkDotOrg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LogtalkDotOrg/subscriptions","organizations_url":"https://api.github.com/users/LogtalkDotOrg/orgs","repos_url":"https://api.github.com/users/LogtalkDotOrg/repos","events_url":"https://api.github.com/users/LogtalkDotOrg/events{/privacy}","received_events_url":"https://api.github.com/users/LogtalkDotOrg/received_events","type":"Organization","site_admin":false},"repo":{"id":67347876,"name":"learnxinyminutes-docs","full_name":"LogtalkDotOrg/learnxinyminutes-docs","owner":{"login":"LogtalkDotOrg","id":2140053,"avatar_url":"https://avatars.githubusercontent.com/u/2140053?v=3","gravatar_id":"","url":"https://api.github.com/users/LogtalkDotOrg","html_url":"https://github.com/LogtalkDotOrg","followers_url":"https://api.github.com/users/LogtalkDotOrg/followers","following_url":"https://api.github.com/users/LogtalkDotOrg/following{/other_user}","gists_url":"https://api.github.com/users/LogtalkDotOrg/gists{/gist_id}","starred_url":"https://api.github.com/users/LogtalkDotOrg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LogtalkDotOrg/subscriptions","organizations_url":"https://api.github.com/users/LogtalkDotOrg/orgs","repos_url":"https://api.github.com/users/LogtalkDotOrg/repos","events_url":"https://api.github.com/users/LogtalkDotOrg/events{/privacy}","received_events_url":"https://api.github.com/users/LogtalkDotOrg/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/LogtalkDotOrg/learnxinyminutes-docs","description":"Code documentation written as code! How novel and totally my idea!","fork":true,"url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs","forks_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/forks","keys_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/teams","hooks_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/hooks","issue_events_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/issues/events{/number}","events_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/events","assignees_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/assignees{/user}","branches_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/branches{/branch}","tags_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/tags","blobs_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/statuses/{sha}","languages_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/languages","stargazers_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/stargazers","contributors_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/contributors","subscribers_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/subscribers","subscription_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/subscription","commits_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/contents/{+path}","compare_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/merges","archive_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/downloads","issues_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/issues{/number}","pulls_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/pulls{/number}","milestones_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/milestones{/number}","notifications_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/labels{/name}","releases_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/releases{/id}","deployments_url":"https://api.github.com/repos/LogtalkDotOrg/learnxinyminutes-docs/deployments","created_at":"2016-09-04T13:58:47Z","updated_at":"2016-09-04T13:58:50Z","pushed_at":"2016-09-16T08:50:39Z","git_url":"git://github.com/LogtalkDotOrg/learnxinyminutes-docs.git","ssh_url":"git@github.com:LogtalkDotOrg/learnxinyminutes-docs.git","clone_url":"https://github.com/LogtalkDotOrg/learnxinyminutes-docs.git","svn_url":"https://github.com/LogtalkDotOrg/learnxinyminutes-docs","homepage":"http://learnxinyminutes.com/","size":10676,"stargazers_count":0,"watchers_count":0,"language":"TeX","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"adambard:master","ref":"master","sha":"527eab7108f4b5587f4a4afd9dad53ef0de2c565","user":{"login":"adambard","id":515720,"avatar_url":"https://avatars.githubusercontent.com/u/515720?v=3","gravatar_id":"","url":"https://api.github.com/users/adambard","html_url":"https://github.com/adambard","followers_url":"https://api.github.com/users/adambard/followers","following_url":"https://api.github.com/users/adambard/following{/other_user}","gists_url":"https://api.github.com/users/adambard/gists{/gist_id}","starred_url":"https://api.github.com/users/adambard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adambard/subscriptions","organizations_url":"https://api.github.com/users/adambard/orgs","repos_url":"https://api.github.com/users/adambard/repos","events_url":"https://api.github.com/users/adambard/events{/privacy}","received_events_url":"https://api.github.com/users/adambard/received_events","type":"User","site_admin":false},"repo":{"id":10974951,"name":"learnxinyminutes-docs","full_name":"adambard/learnxinyminutes-docs","owner":{"login":"adambard","id":515720,"avatar_url":"https://avatars.githubusercontent.com/u/515720?v=3","gravatar_id":"","url":"https://api.github.com/users/adambard","html_url":"https://github.com/adambard","followers_url":"https://api.github.com/users/adambard/followers","following_url":"https://api.github.com/users/adambard/following{/other_user}","gists_url":"https://api.github.com/users/adambard/gists{/gist_id}","starred_url":"https://api.github.com/users/adambard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adambard/subscriptions","organizations_url":"https://api.github.com/users/adambard/orgs","repos_url":"https://api.github.com/users/adambard/repos","events_url":"https://api.github.com/users/adambard/events{/privacy}","received_events_url":"https://api.github.com/users/adambard/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/adambard/learnxinyminutes-docs","description":"Code documentation written as code! How novel and totally my idea!","fork":false,"url":"https://api.github.com/repos/adambard/learnxinyminutes-docs","forks_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/forks","keys_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/teams","hooks_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/hooks","issue_events_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/issues/events{/number}","events_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/events","assignees_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/assignees{/user}","branches_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/branches{/branch}","tags_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/tags","blobs_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/statuses/{sha}","languages_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/languages","stargazers_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/stargazers","contributors_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/contributors","subscribers_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/subscribers","subscription_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/subscription","commits_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/contents/{+path}","compare_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/merges","archive_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/downloads","issues_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/issues{/number}","pulls_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/pulls{/number}","milestones_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/milestones{/number}","notifications_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/labels{/name}","releases_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/releases{/id}","deployments_url":"https://api.github.com/repos/adambard/learnxinyminutes-docs/deployments","created_at":"2013-06-26T17:58:34Z","updated_at":"2016-09-16T13:17:06Z","pushed_at":"2016-09-16T14:02:48Z","git_url":"git://github.com/adambard/learnxinyminutes-docs.git","ssh_url":"git@github.com:adambard/learnxinyminutes-docs.git","clone_url":"https://github.com/adambard/learnxinyminutes-docs.git","svn_url":"https://github.com/adambard/learnxinyminutes-docs","homepage":"http://learnxinyminutes.com/","size":23964,"stargazers_count":3858,"watchers_count":3858,"language":"TeX","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1488,"mirror_url":null,"open_issues_count":142,"forks":1488,"open_issues":142,"watchers":3858,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/adambard/learnxinyminutes-docs/pulls/2374"},"html":{"href":"https://github.com/adambard/learnxinyminutes-docs/pull/2374"},"issue":{"href":"https://api.github.com/repos/adambard/learnxinyminutes-docs/issues/2374"},"comments":{"href":"https://api.github.com/repos/adambard/learnxinyminutes-docs/issues/2374/comments"},"review_comments":{"href":"https://api.github.com/repos/adambard/learnxinyminutes-docs/pulls/2374/comments"},"review_comment":{"href":"https://api.github.com/repos/adambard/learnxinyminutes-docs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/adambard/learnxinyminutes-docs/pulls/2374/commits"},"statuses":{"href":"https://api.github.com/repos/adambard/learnxinyminutes-docs/statuses/d0647362f6ea297bbeeaf46c964e79e6a4ba8340"}}}}
{"actor":{"display_login":"pmoura"}}