eyelang 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/README.md +7 -7
  2. package/book-assets/cli-observation-loop.svg +1 -1
  3. package/book-assets/example-landscape.svg +1 -1
  4. package/book-assets/laboratory-progression.svg +1 -1
  5. package/book-assets/part-4-craft.svg +1 -1
  6. package/book-assets/rdf-adapter-pipeline.svg +3 -3
  7. package/book-assets/reference-navigation.svg +1 -1
  8. package/book-assets/review-lenses.svg +1 -1
  9. package/book-assets/title-page.svg +2 -2
  10. package/conformance-report.md +1 -1
  11. package/examples/book/README.md +4 -4
  12. package/examples/book/chapter-01/01-parent.pl +1 -1
  13. package/examples/book/chapter-01/02-child.pl +1 -1
  14. package/examples/book/chapter-02/01-measurement.pl +1 -1
  15. package/examples/book/chapter-02/02-label.pl +1 -1
  16. package/examples/book/chapter-03/01-eligible.pl +1 -1
  17. package/examples/book/chapter-03/02-adult.pl +1 -1
  18. package/examples/book/chapter-03/03-can_enter.pl +1 -1
  19. package/examples/book/chapter-03/04-high_score.pl +1 -1
  20. package/examples/book/chapter-03/05-parent.pl +1 -1
  21. package/examples/book/chapter-03/06-ancestor.pl +1 -1
  22. package/examples/book/chapter-03/07-different.pl +1 -1
  23. package/examples/book/chapter-03/08-has_parent.pl +1 -1
  24. package/examples/book/chapter-03/09-program.pl +1 -1
  25. package/examples/book/chapter-03/10-closed.pl +1 -1
  26. package/examples/book/chapter-03/11-p.pl +1 -1
  27. package/examples/book/chapter-04/01-path.pl +1 -1
  28. package/examples/book/chapter-05/01-first.pl +1 -1
  29. package/examples/book/chapter-05/02-reverse_acc.pl +1 -1
  30. package/examples/book/chapter-06/01-next.pl +1 -1
  31. package/examples/book/chapter-06/02-safe_reading.pl +1 -1
  32. package/examples/book/chapter-06/03-square.pl +1 -1
  33. package/examples/book/chapter-06/04-factorial.pl +1 -1
  34. package/examples/book/chapter-07/01-allowed.pl +1 -1
  35. package/examples/book/chapter-07/02-all_tests_pass.pl +1 -1
  36. package/examples/book/chapter-08/01-findall.pl +1 -1
  37. package/examples/book/chapter-08/02-outgoing_costs.pl +1 -1
  38. package/examples/book/chapter-08/03-best_route.pl +1 -1
  39. package/examples/book/chapter-09/01-functor.pl +1 -1
  40. package/examples/book/chapter-09/02-normalized.pl +1 -1
  41. package/examples/book/chapter-09/03-message.pl +1 -1
  42. package/examples/book/chapter-10/01-plan.pl +1 -1
  43. package/examples/book/chapter-11/01-why.pl +1 -1
  44. package/examples/book/chapter-12/01-invalid_probability.pl +1 -1
  45. package/examples/book/chapter-12/02-invalid_assignment.pl +1 -1
  46. package/examples/book/chapter-14/01-heating.pl +1 -1
  47. package/examples/book/chapter-15/01-rdf.pl +1 -1
  48. package/examples/book/chapter-16/01-socket.pl +1 -1
  49. package/examples/book/chapter-16/02-socket-2.pl +1 -1
  50. package/examples/book/chapter-17/01-path.pl +1 -1
  51. package/examples/book/chapter-17/02-adult.pl +1 -1
  52. package/examples/book/chapter-17/03-bad_member.pl +1 -1
  53. package/examples/book/chapter-17/04-item.pl +1 -1
  54. package/examples/book/chapter-18/01-routeable.pl +1 -1
  55. package/examples/book/chapter-18/02-routeable-2.pl +1 -1
  56. package/examples/book/chapter-18/03-prefix.pl +1 -1
  57. package/examples/book/chapter-18/04-candidate_pair.pl +1 -1
  58. package/examples/book/chapter-18/05-compatible_pair.pl +1 -1
  59. package/examples/book/chapter-19/01-factorial.pl +1 -1
  60. package/examples/book/chapter-19/02-invalid_limits.pl +1 -1
  61. package/examples/book/chapter-20/01-connected.pl +1 -1
  62. package/examples/book/chapter-20/02-within_thermal_limits.pl +1 -1
  63. package/examples/book/chapter-20/03-search.pl +1 -1
  64. package/examples/book/chapter-21/01-grandparent.pl +1 -1
  65. package/examples/book/chapter-21/02-loop_edge.pl +1 -1
  66. package/examples/book/chapter-21/03-eligible.pl +1 -1
  67. package/examples/book/chapter-21/04-grows.pl +1 -1
  68. package/examples/book/chapter-22/01-tree.pl +1 -1
  69. package/examples/book/chapter-22/02-tree_member.pl +1 -1
  70. package/examples/book/chapter-22/03-mirror.pl +1 -1
  71. package/examples/book/chapter-22/04-evaluate.pl +1 -1
  72. package/examples/book/chapter-22/05-lookup.pl +1 -1
  73. package/examples/book/chapter-22/06-simplify.pl +1 -1
  74. package/examples/book/chapter-23/01-adult.pl +1 -1
  75. package/examples/book/chapter-23/02-adult-2.pl +1 -1
  76. package/examples/book/chapter-23/03-can_board.pl +1 -1
  77. package/examples/book/chapter-23/04-traveler_in_good_standing.pl +1 -1
  78. package/examples/book/chapter-23/05-connection.pl +1 -1
  79. package/examples/book/chapter-23/06-rail_connection.pl +1 -1
  80. package/examples/book/chapter-23/07-sum_numbers.pl +1 -1
  81. package/examples/book/chapter-23/08-sum_numbers_acc.pl +1 -1
  82. package/examples/book/chapter-24/01-simple_path.pl +1 -1
  83. package/examples/book/chapter-24/02-reachable.pl +1 -1
  84. package/examples/book/chapter-24/03-best_plan.pl +1 -1
  85. package/examples/book/chapter-25/01-person.pl +1 -1
  86. package/examples/book/chapter-25/02-active_badge.pl +1 -1
  87. package/examples/book/chapter-25/03-in_good_standing.pl +1 -1
  88. package/examples/book/chapter-25/04-incompatible_status.pl +1 -1
  89. package/examples/book/chapter-26/01-mortal.pl +1 -1
  90. package/examples/book/chapter-26/02-triple.pl +1 -1
  91. package/examples/book/chapter-26/03-edge.pl +1 -1
  92. package/examples/book/chapter-27/01-natural.pl +1 -1
  93. package/examples/book/chapter-27/02-list_length.pl +1 -1
  94. package/examples/book/chapter-27/03-reverse_acc.pl +1 -1
  95. package/examples/book/chapter-28/01-program.pl +1 -1
  96. package/examples/book/chapter-28/02-triangle.pl +1 -1
  97. package/examples/book/chapter-28/03-rectangle.pl +1 -1
  98. package/examples/book/chapter-28/04-preserves_combine.pl +1 -1
  99. package/examples/book/chapter-29/01-noncommuting_pair.pl +1 -1
  100. package/examples/book/chapter-32/01-eligible.pl +1 -1
  101. package/examples/book/chapter-32/02-eligible-2.pl +1 -1
  102. package/examples/book/chapter-33/01-assigned_badge.pl +1 -1
  103. package/examples/book/chapter-33/02-source_role.pl +1 -1
  104. package/examples/book/chapter-33/03-chosen_pair.pl +1 -1
  105. package/examples/book/chapter-33/04-path.pl +1 -1
  106. package/examples/book/chapter-33/05-unregistered.pl +1 -1
  107. package/examples/book/chapter-33/06-step.pl +1 -1
  108. package/examples/book/chapter-33/07-depends.pl +1 -1
  109. package/examples/book/chapter-33/08-within_limit.pl +1 -1
  110. package/examples/book/chapter-33/09-invalid_badge_assignment.pl +1 -1
  111. package/examples/book/chapter-33/10-theory_version.pl +1 -1
  112. package/examples/book/chapter-34/01-travel_status.pl +1 -1
  113. package/examples/book/chapter-34/02-require_route.pl +1 -1
  114. package/examples/book/chapter-34/03-regional_total.pl +1 -1
  115. package/examples/book/chapter-35/01-term_shape.pl +1 -1
  116. package/examples/book/chapter-36/01-program.pl +1 -1
  117. package/examples/book/chapter-36/02-program-2.pl +1 -1
  118. package/examples/book/chapter-36/03-program-3.pl +1 -1
  119. package/examples/book/chapter-37/01-write_event.pl +1 -1
  120. package/examples/book/chapter-38/01-city.pl +1 -1
  121. package/examples/cdcl-sat-solver.pl +2 -2
  122. package/examples/collatz-1000.pl +1 -1
  123. package/examples/equality-saturation.pl +1 -1
  124. package/examples/existential-rule.pl +1 -1
  125. package/examples/herbrand-semantics.pl +1 -1
  126. package/examples/herbrand-witnesses.pl +1 -1
  127. package/examples/iso-integer-arithmetic.pl +1 -1
  128. package/examples/knowledge-engineering-alignment-flow.pl +1 -1
  129. package/examples/language.pl +2 -2
  130. package/examples/law-of-cosines.pl +1 -1
  131. package/examples/linear-logic-resources.pl +1 -1
  132. package/examples/markov-logic-network.pl +1 -1
  133. package/examples/matrix-noncommutativity.pl +1 -1
  134. package/examples/partial-evaluator.pl +1 -1
  135. package/examples/peano-calculus.pl +1 -1
  136. package/examples/prime-range.pl +1 -1
  137. package/examples/register-allocation.pl +1 -1
  138. package/examples/route-planning.pl +1 -1
  139. package/examples/sat-solver-dpll.pl +1 -1
  140. package/examples/symbolic-derivative.pl +1 -1
  141. package/examples/term-tools.pl +1 -1
  142. package/examples/trust-flow-provenance-threshold.pl +1 -1
  143. package/examples/vector-similarity.pl +1 -1
  144. package/examples/web-names.pl +1 -1
  145. package/examples/workplace-compliance.pl +1 -1
  146. package/index.d.ts +68 -68
  147. package/index.js +1 -1
  148. package/package.json +2 -2
  149. package/playground.html +10 -10
  150. package/src/cli.js +4 -4
  151. package/src/explain.js +4 -4
  152. package/src/index.js +4 -4
  153. package/src/iso.js +1 -1
  154. package/src/library.js +7 -7
  155. package/src/parser.js +1 -1
  156. package/src/playground-worker.js +2 -2
  157. package/src/solver.js +4 -4
  158. package/src/term.js +1 -1
  159. package/test/conformance/README.md +6 -6
  160. package/test/conformance/THIRD_PARTY.md +4 -4
  161. package/test/conformance/cases/iso/logtalk_abolish.pl +1 -1
  162. package/test/conformance/cases/iso/logtalk_arg_unification.pl +1 -1
  163. package/test/conformance/cases/iso/logtalk_assert_order.pl +1 -1
  164. package/test/conformance/cases/iso/logtalk_atom_chars.pl +1 -1
  165. package/test/conformance/cases/iso/logtalk_atom_codes.pl +1 -1
  166. package/test/conformance/cases/iso/logtalk_atom_concat.pl +1 -1
  167. package/test/conformance/cases/iso/logtalk_atom_length.pl +1 -1
  168. package/test/conformance/cases/iso/logtalk_bagof.pl +1 -1
  169. package/test/conformance/cases/iso/logtalk_char_code.pl +1 -1
  170. package/test/conformance/cases/iso/logtalk_clause.pl +1 -1
  171. package/test/conformance/cases/iso/logtalk_compare_standard_order.pl +1 -1
  172. package/test/conformance/cases/iso/logtalk_copy_term_semantics.pl +1 -1
  173. package/test/conformance/cases/iso/logtalk_current_predicate.pl +1 -1
  174. package/test/conformance/cases/iso/logtalk_current_streams.pl +1 -1
  175. package/test/conformance/cases/iso/logtalk_findall.pl +1 -1
  176. package/test/conformance/cases/iso/logtalk_number_chars.pl +1 -1
  177. package/test/conformance/cases/iso/logtalk_number_codes.pl +1 -1
  178. package/test/conformance/cases/iso/logtalk_occurs_check.pl +1 -1
  179. package/test/conformance/cases/iso/logtalk_once.pl +1 -1
  180. package/test/conformance/cases/iso/logtalk_operators.pl +1 -1
  181. package/test/conformance/cases/iso/logtalk_prolog_flags.pl +1 -1
  182. package/test/conformance/cases/iso/logtalk_repeat.pl +1 -1
  183. package/test/conformance/cases/iso/logtalk_retract.pl +1 -1
  184. package/test/conformance/cases/iso/logtalk_setof.pl +1 -1
  185. package/test/conformance/cases/iso/logtalk_sub_atom.pl +1 -1
  186. package/test/conformance/cases/iso/logtalk_term_comparison.pl +1 -1
  187. package/test/conformance/cases/iso/logtalk_term_variables.pl +1 -1
  188. package/test/conformance/cases/iso/logtalk_univ.pl +1 -1
  189. package/test/conformance/cases/strings/064_reusable_string_builtins.pl +3 -3
  190. package/test/conformance/cases/strings/071_string_edges.pl +1 -1
  191. package/test/conformance/errors/iso/logtalk_abolish_arity_type.pl +1 -1
  192. package/test/conformance/errors/iso/logtalk_abolish_bad_indicator.pl +1 -1
  193. package/test/conformance/errors/iso/logtalk_abolish_name_type.pl +1 -1
  194. package/test/conformance/errors/iso/logtalk_abolish_negative_arity.pl +1 -1
  195. package/test/conformance/errors/iso/logtalk_abolish_unbound.pl +1 -1
  196. package/test/conformance/errors/iso/logtalk_abolish_unbound_arity.pl +1 -1
  197. package/test/conformance/errors/iso/logtalk_arg_index_type.pl +1 -1
  198. package/test/conformance/errors/iso/logtalk_arg_number.pl +1 -1
  199. package/test/conformance/errors/iso/logtalk_asserta_bad_body.pl +1 -1
  200. package/test/conformance/errors/iso/logtalk_asserta_noncallable.pl +1 -1
  201. package/test/conformance/errors/iso/logtalk_assertz_noncallable.pl +1 -1
  202. package/test/conformance/errors/iso/logtalk_atom_chars_atom_type.pl +1 -1
  203. package/test/conformance/errors/iso/logtalk_atom_chars_character_type.pl +1 -1
  204. package/test/conformance/errors/iso/logtalk_atom_chars_improper.pl +1 -1
  205. package/test/conformance/errors/iso/logtalk_atom_chars_list_type.pl +1 -1
  206. package/test/conformance/errors/iso/logtalk_atom_chars_unbound.pl +1 -1
  207. package/test/conformance/errors/iso/logtalk_atom_codes_atom_type.pl +1 -1
  208. package/test/conformance/errors/iso/logtalk_atom_codes_bad_code.pl +1 -1
  209. package/test/conformance/errors/iso/logtalk_atom_codes_integer_type.pl +1 -1
  210. package/test/conformance/errors/iso/logtalk_atom_codes_list_type.pl +1 -1
  211. package/test/conformance/errors/iso/logtalk_atom_codes_unbound.pl +1 -1
  212. package/test/conformance/errors/iso/logtalk_atom_concat_left_type.pl +1 -1
  213. package/test/conformance/errors/iso/logtalk_atom_concat_right_type.pl +1 -1
  214. package/test/conformance/errors/iso/logtalk_atom_concat_unbound.pl +1 -1
  215. package/test/conformance/errors/iso/logtalk_atom_concat_whole_type.pl +1 -1
  216. package/test/conformance/errors/iso/logtalk_atom_length_atom_type.pl +1 -1
  217. package/test/conformance/errors/iso/logtalk_atom_length_integer_type.pl +1 -1
  218. package/test/conformance/errors/iso/logtalk_atom_length_negative.pl +1 -1
  219. package/test/conformance/errors/iso/logtalk_atom_length_unbound.pl +1 -1
  220. package/test/conformance/errors/iso/logtalk_bagof_improper.pl +1 -1
  221. package/test/conformance/errors/iso/logtalk_bagof_nonlist.pl +1 -1
  222. package/test/conformance/errors/iso/logtalk_char_code_character_type.pl +1 -1
  223. package/test/conformance/errors/iso/logtalk_char_code_integer_type.pl +1 -1
  224. package/test/conformance/errors/iso/logtalk_char_code_negative.pl +1 -1
  225. package/test/conformance/errors/iso/logtalk_char_code_number_character.pl +1 -1
  226. package/test/conformance/errors/iso/logtalk_char_code_unbound.pl +1 -1
  227. package/test/conformance/errors/iso/logtalk_clause_noncallable_body.pl +1 -1
  228. package/test/conformance/errors/iso/logtalk_clause_noncallable_head.pl +1 -1
  229. package/test/conformance/errors/iso/logtalk_compare_order_domain.pl +1 -1
  230. package/test/conformance/errors/iso/logtalk_compare_order_type.pl +1 -1
  231. package/test/conformance/errors/iso/logtalk_current_flag_compound.pl +1 -1
  232. package/test/conformance/errors/iso/logtalk_current_flag_name_type.pl +1 -1
  233. package/test/conformance/errors/iso/logtalk_current_flag_unknown.pl +1 -1
  234. package/test/conformance/errors/iso/logtalk_current_input_bad_stream.pl +1 -1
  235. package/test/conformance/errors/iso/logtalk_current_op_bad_specifier.pl +1 -1
  236. package/test/conformance/errors/iso/logtalk_current_op_high_priority.pl +1 -1
  237. package/test/conformance/errors/iso/logtalk_current_output_bad_stream.pl +1 -1
  238. package/test/conformance/errors/iso/logtalk_current_predicate_bad_name.pl +1 -1
  239. package/test/conformance/errors/iso/logtalk_current_predicate_negative_arity.pl +1 -1
  240. package/test/conformance/errors/iso/logtalk_current_predicate_scalar.pl +1 -1
  241. package/test/conformance/errors/iso/logtalk_findall_improper.pl +1 -1
  242. package/test/conformance/errors/iso/logtalk_findall_nonlist.pl +1 -1
  243. package/test/conformance/errors/iso/logtalk_functor_arity_type.pl +1 -1
  244. package/test/conformance/errors/iso/logtalk_functor_compound_name.pl +1 -1
  245. package/test/conformance/errors/iso/logtalk_functor_float_name.pl +1 -1
  246. package/test/conformance/errors/iso/logtalk_number_chars_character_type.pl +1 -1
  247. package/test/conformance/errors/iso/logtalk_number_chars_list_type.pl +1 -1
  248. package/test/conformance/errors/iso/logtalk_number_chars_number_type.pl +1 -1
  249. package/test/conformance/errors/iso/logtalk_number_chars_partial.pl +1 -1
  250. package/test/conformance/errors/iso/logtalk_number_chars_syntax.pl +1 -1
  251. package/test/conformance/errors/iso/logtalk_number_chars_unbound.pl +1 -1
  252. package/test/conformance/errors/iso/logtalk_number_codes_bad_code.pl +1 -1
  253. package/test/conformance/errors/iso/logtalk_number_codes_list_type.pl +1 -1
  254. package/test/conformance/errors/iso/logtalk_number_codes_number_type.pl +1 -1
  255. package/test/conformance/errors/iso/logtalk_number_codes_partial.pl +1 -1
  256. package/test/conformance/errors/iso/logtalk_number_codes_syntax.pl +1 -1
  257. package/test/conformance/errors/iso/logtalk_number_codes_unbound.pl +1 -1
  258. package/test/conformance/errors/iso/logtalk_once_noncallable.pl +1 -1
  259. package/test/conformance/errors/iso/logtalk_once_unbound.pl +1 -1
  260. package/test/conformance/errors/iso/logtalk_op_bad_specifier.pl +1 -1
  261. package/test/conformance/errors/iso/logtalk_op_high_priority.pl +1 -1
  262. package/test/conformance/errors/iso/logtalk_op_negative_priority.pl +1 -1
  263. package/test/conformance/errors/iso/logtalk_op_priority_type.pl +1 -1
  264. package/test/conformance/errors/iso/logtalk_op_unbound_name.pl +1 -1
  265. package/test/conformance/errors/iso/logtalk_op_unbound_priority.pl +1 -1
  266. package/test/conformance/errors/iso/logtalk_op_unbound_specifier.pl +1 -1
  267. package/test/conformance/errors/iso/logtalk_retract_unbound.pl +1 -1
  268. package/test/conformance/errors/iso/logtalk_retract_unbound_head.pl +1 -1
  269. package/test/conformance/errors/iso/logtalk_set_flag_name_type.pl +1 -1
  270. package/test/conformance/errors/iso/logtalk_set_flag_unbound_name.pl +1 -1
  271. package/test/conformance/errors/iso/logtalk_set_flag_unbound_value.pl +1 -1
  272. package/test/conformance/errors/iso/logtalk_set_flag_unknown.pl +1 -1
  273. package/test/conformance/errors/iso/logtalk_set_flag_value.pl +1 -1
  274. package/test/conformance/errors/iso/logtalk_setof_nonlist.pl +1 -1
  275. package/test/conformance/errors/iso/logtalk_sub_atom_before_type.pl +1 -1
  276. package/test/conformance/errors/iso/logtalk_sub_atom_negative.pl +1 -1
  277. package/test/conformance/errors/iso/logtalk_sub_atom_result_type.pl +1 -1
  278. package/test/conformance/errors/iso/logtalk_sub_atom_source_type.pl +1 -1
  279. package/test/conformance/errors/iso/logtalk_sub_atom_unbound.pl +1 -1
  280. package/test/conformance/errors/iso/logtalk_term_variables_improper.pl +1 -1
  281. package/test/conformance/errors/iso/logtalk_term_variables_nonlist.pl +1 -1
  282. package/test/conformance/errors/iso/logtalk_univ_head_compound.pl +1 -1
  283. package/test/conformance/errors/iso/logtalk_univ_head_float.pl +1 -1
  284. package/test/conformance/errors/iso/logtalk_univ_head_integer.pl +1 -1
  285. package/test/conformance/errors/iso/logtalk_univ_single_compound.pl +1 -1
  286. package/test/conformance/expected/strings/064_reusable_string_builtins.pl +1 -1
  287. package/test/run-conformance-report.mjs +4 -4
  288. package/test/run-conformance.mjs +3 -3
  289. package/test/run-playground.mjs +3 -3
  290. package/test/run-rdf-tools.mjs +15 -15
  291. package/test/run-regression.mjs +35 -35
  292. package/the-art-of-eyelang.md +136 -136
  293. package/tools/README.md +2 -2
  294. package/tools/extract-book-examples.mjs +4 -4
  295. package/tools/pl-to-rdf.mjs +2 -2
  296. package/tools/rdf-codec.mjs +8 -8
  297. package/tools/rdf-to-pl.mjs +9 -9
  298. package/why-eyelang.md +47 -47
package/README.md CHANGED
@@ -1,17 +1,17 @@
1
- # EyeLang
1
+ # Eyelang
2
2
 
3
3
  <p align="center">
4
- <img src="eyelang-logo.png" alt="EyeLang logo" width="520">
4
+ <img src="eyelang-logo.png" alt="Eyelang logo" width="520">
5
5
  </p>
6
6
 
7
7
  [![npm version](https://img.shields.io/npm/v/eyelang.svg)](https://www.npmjs.com/package/eyelang)
8
8
  [![DOI](https://img.shields.io/badge/DOI-10.5281%2Fzenodo.21446308-blue.svg)](https://doi.org/10.5281/zenodo.21446308)
9
9
 
10
- EyeLang combines ISO Prolog and W3C RDF 1.2 to produce answers with
10
+ Eyelang combines ISO Prolog and W3C RDF 1.2 to produce answers with
11
11
  inspectable proofs.
12
12
 
13
- **[Book — *The Art of EyeLang*](https://eyereasoner.github.io/eyelang/the-art-of-eyelang)** ·
14
- **[Why EyeLang?](https://eyereasoner.github.io/eyelang/why-eyelang)** ·
13
+ **[Book — *The Art of Eyelang*](https://eyereasoner.github.io/eyelang/the-art-of-eyelang)** ·
14
+ **[Why Eyelang?](https://eyereasoner.github.io/eyelang/why-eyelang)** ·
15
15
  **[Playground](https://eyereasoner.github.io/eyelang/playground)**
16
16
 
17
17
  The book is the reference for the language, command line, JavaScript API,
@@ -19,7 +19,7 @@ RDF 1.2 support, examples, proofs, conformance, and implementation.
19
19
 
20
20
  ## Quick start
21
21
 
22
- EyeLang requires Node.js 18 or newer.
22
+ Eyelang requires Node.js 18 or newer.
23
23
 
24
24
  ```sh
25
25
  npm install --global eyelang
@@ -50,4 +50,4 @@ npm install
50
50
  npm test
51
51
  ```
52
52
 
53
- EyeLang is released under the [MIT License](LICENSE.md).
53
+ Eyelang is released under the [MIT License](LICENSE.md).
@@ -1,6 +1,6 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" width="900" height="470" viewBox="0 0 900 470" role="img" aria-labelledby="title desc">
2
2
  <title id="title">The command line observation loop</title>
3
- <desc id="desc">A predicted result and an EyeLang program enter the command line. It emits answers and proofs on standard output, warnings and statistics on standard error, and a process status. Comparison of prediction and evidence leads to a focused revision.</desc>
3
+ <desc id="desc">A predicted result and an Eyelang program enter the command line. It emits answers and proofs on standard output, warnings and statistics on standard error, and a process status. Comparison of prediction and evidence leads to a focused revision.</desc>
4
4
  <defs>
5
5
  <style>
6
6
  .bg{fill:#f4efe3}.source{fill:#fff0d9;stroke:#9a5b18;stroke-width:2}.engine{fill:#243447;stroke:#172334;stroke-width:3}.out{fill:#dcefe8;stroke:#2f6f55;stroke-width:2}.diag{fill:#c7dfe2;stroke:#376e75;stroke-width:2}.status{fill:#ead7d7;stroke:#8b3a3a;stroke-width:2}.compare{fill:#fffdf7;stroke:#526273;stroke-width:2}
@@ -1,6 +1,6 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" width="900" height="500" viewBox="0 0 900 500" role="img" aria-labelledby="title desc">
2
2
  <title id="title">The executable example landscape</title>
3
- <desc id="desc">A map connects a central EyeLang program to mathematics, search, planning, policy, science, program analysis, symbolic systems, and RDF, with paths to answers and proofs.</desc>
3
+ <desc id="desc">A map connects a central Eyelang program to mathematics, search, planning, policy, science, program analysis, symbolic systems, and RDF, with paths to answers and proofs.</desc>
4
4
  <defs>
5
5
  <style>
6
6
  .bg{fill:#f4efe3}.region{stroke:#243447;stroke-width:2}.core{fill:#243447;stroke:#172334;stroke-width:3}
@@ -1,5 +1,5 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" width="900" height="470" viewBox="0 0 900 470" role="img" aria-labelledby="title desc">
2
- <title id="title">Progression through twelve EyeLang laboratories</title>
2
+ <title id="title">Progression through twelve Eyelang laboratories</title>
3
3
  <desc id="desc">Five connected stages group laboratories one and two as relational foundations, three and four as finite search, five through seven as mathematical and symbolic methods, eight through eleven as domain reasoning, and twelve as an integrated release-quality service.</desc>
4
4
  <defs>
5
5
  <style>
@@ -1,6 +1,6 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" width="900" height="420" viewBox="0 0 900 420" role="img" aria-labelledby="title desc">
2
2
  <title id="title">A logic programmer's workbench</title>
3
- <desc id="desc">A programmer moves between domain notes, clause cards, a graph sketch, and tested EyeLang code at a warm workbench.</desc>
3
+ <desc id="desc">A programmer moves between domain notes, clause cards, a graph sketch, and tested Eyelang code at a warm workbench.</desc>
4
4
  <style>
5
5
  .wall{fill:#eee5d3}.desk{fill:#a97852}.paper{fill:#fffdf7;stroke:#243447;stroke-width:2}
6
6
  .screen{fill:#243447;stroke:#172334;stroke-width:5}.code{fill:#dcefe8;font:16px ui-monospace,monospace}
@@ -1,6 +1,6 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" width="900" height="380" viewBox="0 0 900 380" role="img" aria-labelledby="title desc">
2
- <title id="title">RDF data passing through the EyeLang adapter</title>
3
- <desc id="desc">Documents and named graphs enter an adapter, become rdf facts for EyeLang rules, and leave as derived N-Quads.</desc>
2
+ <title id="title">RDF data passing through the Eyelang adapter</title>
3
+ <desc id="desc">Documents and named graphs enter an adapter, become rdf facts for Eyelang rules, and leave as derived N-Quads.</desc>
4
4
  <defs><marker id="a" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto"><path d="M0 0 L0 6 L9 3Z" fill="#536b78"/></marker></defs>
5
5
  <style>
6
6
  .bg{fill:#e9f1ee}.paper{fill:#fffdf7;stroke:#243447;stroke-width:2}.adapter{fill:#dcefe8;stroke:#2f6f55;stroke-width:4}
@@ -9,6 +9,6 @@
9
9
  </style>
10
10
  <rect width="900" height="380" class="bg"/>
11
11
  <g transform="translate(35 65)"><rect class="paper" width="190" height="240" rx="6"/><text class="title" x="95" y="35" text-anchor="middle">RDF SOURCES</text><circle cx="52" cy="90" r="13" fill="#a55246"/><circle cx="135" cy="75" r="13" fill="#2f6f55"/><circle cx="115" cy="145" r="13" fill="#d9b85f"/><path class="graph" d="M65 87 L122 78 M128 88 L119 132 M62 99 L105 139"/><text class="text" x="95" y="195" text-anchor="middle">Turtle · TriG</text><text class="text" x="95" y="220" text-anchor="middle">JSON-LD · RDF/XML</text></g>
12
- <path class="flow" d="M230 185 H295"/><rect class="adapter" x="305" y="92" width="290" height="186" rx="16"/><text class="title" x="450" y="125" text-anchor="middle">EXPLICIT ADAPTER</text><text class="text" x="330" y="165">rdf(Subject,</text><text class="text" x="365" y="190">Predicate,</text><text class="text" x="365" y="215">Object, Graph)</text><text class="text" x="330" y="250">+ EyeLang rules</text>
12
+ <path class="flow" d="M230 185 H295"/><rect class="adapter" x="305" y="92" width="290" height="186" rx="16"/><text class="title" x="450" y="125" text-anchor="middle">EXPLICIT ADAPTER</text><text class="text" x="330" y="165">rdf(Subject,</text><text class="text" x="365" y="190">Predicate,</text><text class="text" x="365" y="215">Object, Graph)</text><text class="text" x="330" y="250">+ Eyelang rules</text>
13
13
  <path class="flow" d="M595 185 H660"/><g transform="translate(670 65)"><rect class="paper" width="195" height="240" rx="6"/><text class="title" x="98" y="35" text-anchor="middle">DERIVED RDF</text><text class="text" x="20" y="82">&lt;s&gt; &lt;ancestor&gt; &lt;o&gt;</text><text class="text" x="20" y="110">&lt;s&gt; &lt;status&gt; "safe"</text><text class="text" x="20" y="160">RDF 1.2 N-Quads</text><text class="text" x="20" y="195">named graphs and</text><text class="text" x="20" y="220">triple terms retained</text></g>
14
14
  </svg>
@@ -1,5 +1,5 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" width="900" height="500" viewBox="0 0 900 500" role="img" aria-labelledby="title desc">
2
- <title id="title">Task-driven navigation through the EyeLang reference</title>
2
+ <title id="title">Task-driven navigation through the Eyelang reference</title>
3
3
  <desc id="desc">A reader question branches to language in Chapter 38, predicates in Chapter 39, or execution in Chapter 40. These lead to study paths in Chapter 41, boundaries in Chapter 42, and vocabulary in Chapter 43.</desc>
4
4
  <defs>
5
5
  <style>
@@ -1,5 +1,5 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" width="900" height="470" viewBox="0 0 900 470" role="img" aria-labelledby="title desc">
2
- <title id="title">Five lenses for reviewing an EyeLang program</title>
2
+ <title id="title">Five lenses for reviewing an Eyelang program</title>
3
3
  <desc id="desc">Meaning, logic, control, evidence, and boundary surround one program artifact. A lower loop says predict, run, explain, and revise.</desc>
4
4
  <defs>
5
5
  <style>
@@ -1,8 +1,8 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg"
2
2
  width="1000" height="1450" viewBox="0 0 1000 1450"
3
3
  role="img" aria-labelledby="title desc">
4
- <title id="title">The Art of EyeLang</title>
5
- <desc id="desc">Editable SVG cover for The Art of EyeLang. All text is live text and kept within its surrounding boxes.</desc>
4
+ <title id="title">The Art of Eyelang</title>
5
+ <desc id="desc">Editable SVG cover for The Art of Eyelang. All text is live text and kept within its surrounding boxes.</desc>
6
6
 
7
7
  <defs>
8
8
  <linearGradient id="paper" x1="0" y1="0" x2="0" y2="1">
@@ -1,4 +1,4 @@
1
- # EyeLang conformance report
1
+ # Eyelang conformance report
2
2
 
3
3
  This report summarizes the file-based conformance corpus under `test/conformance/`.
4
4
 
@@ -1,8 +1,8 @@
1
- # The Art of EyeLang — inline examples
1
+ # The Art of Eyelang — inline examples
2
2
 
3
3
  These files are generated from the complete `eyelang` code blocks in
4
- [The Art of EyeLang](../../the-art-of-eyelang.md). They are grouped by chapter and
5
- retain the source text from the book. Goal fragments and non-EyeLang blocks are
4
+ [The Art of Eyelang](../../the-art-of-eyelang.md). They are grouped by chapter and
5
+ retain the source text from the book. Goal fragments and non-Eyelang blocks are
6
6
  not extracted.
7
7
 
8
8
  Regenerate them from the repository root with:
@@ -89,7 +89,7 @@ npm run generate
89
89
 
90
90
  - [01-rdf.pl](chapter-15/01-rdf.pl)
91
91
 
92
- ## Chapter 16: Embedding EyeLang
92
+ ## Chapter 16: Embedding Eyelang
93
93
 
94
94
  - [01-socket.pl](chapter-16/01-socket.pl) — Sockets: naming the knowledge boundary
95
95
  - [02-socket-2.pl](chapter-16/02-socket-2.pl)
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 1.
1
+ % From The Art of Eyelang, Chapter 1.
2
2
  parent(ada, byron).
3
3
  parent(byron, clara).
4
4
  parent(clara, diego).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 1.
1
+ % From The Art of Eyelang, Chapter 1.
2
2
  child(byron, ada).
3
3
  child(clara, byron).
4
4
  child(diego, clara).
@@ -1,3 +1,3 @@
1
- % From The Art of EyeLang, Chapter 2.
1
+ % From The Art of Eyelang, Chapter 2.
2
2
  measurement(battery_1, sample(17, volts(28.4), amps(12.1))).
3
3
  route(a, d, path([a, b, d], cost(9))).
@@ -1,3 +1,3 @@
1
- % From The Art of EyeLang, Chapter 2.
1
+ % From The Art of Eyelang, Chapter 2.
2
2
  label(sensor_1, "Cabin temperature").
3
3
  web_name(sensor_1, '<https://example.org/sensor/1>').
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 3.
1
+ % From The Art of Eyelang, Chapter 3.
2
2
  eligible(Person) :-
3
3
  age(Person, Years),
4
4
  (Years >= 18),
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 3.
1
+ % From The Art of Eyelang, Chapter 3.
2
2
  adult(Person) :-
3
3
  age(Person, Years),
4
4
  (Years >= 18).
@@ -1,3 +1,3 @@
1
- % From The Art of EyeLang, Chapter 3.
1
+ % From The Art of Eyelang, Chapter 3.
2
2
  can_enter(Person) :- staff(Person).
3
3
  can_enter(Person) :- visitor(Person), escorted(Person).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 3.
1
+ % From The Art of Eyelang, Chapter 3.
2
2
  high_score(Case) :-
3
3
  score(Case, Score),
4
4
  threshold(Threshold),
@@ -1,2 +1,2 @@
1
- % From The Art of EyeLang, Chapter 3 — The Herbrand world.
1
+ % From The Art of Eyelang, Chapter 3 — The Herbrand world.
2
2
  parent(pat, jan).
@@ -1,2 +1,2 @@
1
- % From The Art of EyeLang, Chapter 3.
1
+ % From The Art of Eyelang, Chapter 3.
2
2
  ancestor(X, Z) :- parent(X, Y), ancestor(Y, Z).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 3 — Why terms denote themselves.
1
+ % From The Art of Eyelang, Chapter 3 — Why terms denote themselves.
2
2
  different(alice, bob) :- (alice \= bob).
3
3
  different(ticket(alice), ticket(bob)) :-
4
4
  (ticket(alice) \= ticket(bob)).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 3 — Quantification and visible witnesses.
1
+ % From The Art of Eyelang, Chapter 3 — Quantification and visible witnesses.
2
2
  has_parent(Child, parent_of(Child)) :-
3
3
  person(Child).
4
4
 
@@ -1,2 +1,2 @@
1
- % From The Art of EyeLang, Chapter 3 — Equality, unification, and the occurs check.
1
+ % From The Art of Eyelang, Chapter 3 — Equality, unification, and the occurs check.
2
2
  (X = wrapper(X)).
@@ -1,3 +1,3 @@
1
- % From The Art of EyeLang, Chapter 3 — Meaning is not the search strategy.
1
+ % From The Art of Eyelang, Chapter 3 — Meaning is not the search strategy.
2
2
  closed(X) :- blocked(X).
3
3
  open(X) :- candidate(X), \+ closed(X).
@@ -1,3 +1,3 @@
1
- % From The Art of EyeLang, Chapter 3.
1
+ % From The Art of Eyelang, Chapter 3.
2
2
  p(X) :- q(X).
3
3
  q(X) :- \+ p(X).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 4 — Constructing the recursive argument.
1
+ % From The Art of Eyelang, Chapter 4 — Constructing the recursive argument.
2
2
  path(X, Y, [X, Y]) :- edge(X, Y).
3
3
  path(X, Z, [X | Rest]) :-
4
4
  edge(X, Y),
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 5.
1
+ % From The Art of Eyelang, Chapter 5.
2
2
  first([Head | _], Head).
3
3
 
4
4
  contains_item(X, [X | _]).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 5.
1
+ % From The Art of Eyelang, Chapter 5.
2
2
  reverse_acc(List, Reversed) :- reverse_go(List, [], Reversed).
3
3
  reverse_go([], Acc, Acc).
4
4
  reverse_go([X | Xs], Acc, Reversed) :-
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 6.
1
+ % From The Art of Eyelang, Chapter 6.
2
2
  next(X, Y) :- (Y is X + 1).
3
3
  area_rectangle(W, H, Area) :- (Area is W * H).
4
4
 
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 6.
1
+ % From The Art of Eyelang, Chapter 6.
2
2
  safe_reading(Sensor, Value) :-
3
3
  reading(Sensor, Value),
4
4
  (Value >= 0),
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 6.
1
+ % From The Art of Eyelang, Chapter 6.
2
2
  square(N, Square) :-
3
3
  between(1, 10, N),
4
4
  (Square is N * N).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 6.
1
+ % From The Art of Eyelang, Chapter 6.
2
2
  factorial(0, 1).
3
3
  factorial(N, F) :-
4
4
  (N > 0),
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 7.
1
+ % From The Art of Eyelang, Chapter 7.
2
2
  allowed(User) :-
3
3
  user(User),
4
4
  \+ blocked(User).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 7.
1
+ % From The Art of Eyelang, Chapter 7.
2
2
  all_tests_pass(Suite) :-
3
3
  \+ failing_test(Suite).
4
4
 
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 8.
1
+ % From The Art of Eyelang, Chapter 8.
2
2
  findall(Template, Goal, List).
3
3
  countall(Goal, Count).
4
4
  sumall(Value, Goal, Sum).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 8.
1
+ % From The Art of Eyelang, Chapter 8.
2
2
  outgoing_costs(Node, Costs) :-
3
3
  findall(Cost, edge(Node, _, Cost), Costs).
4
4
 
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 8.
1
+ % From The Art of Eyelang, Chapter 8.
2
2
  best_route(From, To, Route, Cost) :-
3
3
  aggregate_min(
4
4
  [CandidateCost, CandidateRoute],
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 9.
1
+ % From The Art of Eyelang, Chapter 9.
2
2
  functor(Term, Name, Arity).
3
3
  arg(Index, Term, Value).
4
4
  (Term =.. [Name | Arguments]).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 9.
1
+ % From The Art of Eyelang, Chapter 9.
2
2
  normalized(Input, Words) :-
3
3
  trim(Input, Trimmed),
4
4
  lowercase(Trimmed, Lower),
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 9.
1
+ % From The Art of Eyelang, Chapter 9.
2
2
  message(event_17, (severity(high), source(sensor_3), reading(temp, 91))).
3
3
 
4
4
  context_member((Left, _right), Member) :- context_member(Left, Member).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 10.
1
+ % From The Art of Eyelang, Chapter 10.
2
2
  plan(State, State, _, []).
3
3
  plan(State, Goal, Seen, [Move | Moves]) :-
4
4
  transition(State, Move, Next),
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 11.
1
+ % From The Art of Eyelang, Chapter 11.
2
2
  why(
3
3
  type(socrates, mortal),
4
4
  proof(
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 12.
1
+ % From The Art of Eyelang, Chapter 12.
2
2
  invalid_probability(Disease, Probability) :-
3
3
  probability(Disease, Probability),
4
4
  (Probability > 1).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 12.
1
+ % From The Art of Eyelang, Chapter 12.
2
2
  invalid_assignment(Person, Role, Other) :-
3
3
  assigned(Person, Role),
4
4
  incompatible_roles(Role, Other),
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 14.
1
+ % From The Art of Eyelang, Chapter 14.
2
2
  heating(Battery, Watts) :-
3
3
  current(Battery, Amps),
4
4
  resistance(Battery, Ohms),
@@ -1,3 +1,3 @@
1
- % From The Art of EyeLang, Chapter 15.
1
+ % From The Art of Eyelang, Chapter 15.
2
2
  rdf(S, iri("https://example/ancestor"), O, G) :-
3
3
  rdf(S, iri("https://example/parent"), O, G).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 16 — Sockets: naming the knowledge boundary.
1
+ % From The Art of Eyelang, Chapter 16 — Sockets: naming the knowledge boundary.
2
2
  socket(family_source, provides(predicate(parent, 2))).
3
3
  plug(family_file, family_source).
4
4
 
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 16.
1
+ % From The Art of Eyelang, Chapter 16.
2
2
  socket(Name, Contract).
3
3
  plug(Provider, Name).
4
4
  provides(Signature).
@@ -1,3 +1,3 @@
1
- % From The Art of EyeLang, Chapter 17.
1
+ % From The Art of Eyelang, Chapter 17.
2
2
  path(X, Y) :- edge(X, Y).
3
3
  path(X, Z) :- edge(X, Y), path(Y, Z).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 17 — The same relation, a different computation.
1
+ % From The Art of Eyelang, Chapter 17 — The same relation, a different computation.
2
2
  adult(Person) :- person(Person), age(Person, Age), (Age >= 18).
3
3
 
4
4
  adult(Person) :- (Age >= 18), age(Person, Age), person(Person).
@@ -1,3 +1,3 @@
1
- % From The Art of EyeLang, Chapter 17.
1
+ % From The Art of Eyelang, Chapter 17.
2
2
  % Poor control: recursion starts before one list cell is exposed.
3
3
  bad_member(X, List) :- bad_member(X, Rest), (List = [_ | Rest]).
@@ -1,3 +1,3 @@
1
- % From The Art of EyeLang, Chapter 17.
1
+ % From The Art of Eyelang, Chapter 17.
2
2
  item(X, [X | _]).
3
3
  item(X, [_ | Rest]) :- item(X, Rest).
@@ -1,2 +1,2 @@
1
- % From The Art of EyeLang, Chapter 18 — Begin with ground sentences.
1
+ % From The Art of Eyelang, Chapter 18 — Begin with ground sentences.
2
2
  routeable(parcel_7, hub_north).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 18.
1
+ % From The Art of Eyelang, Chapter 18.
2
2
  routeable(Parcel, Hub) :-
3
3
  destination_zone(Parcel, Zone),
4
4
  serves(Hub, Zone),
@@ -1,3 +1,3 @@
1
- % From The Art of EyeLang, Chapter 18 — Invent examples before recursion.
1
+ % From The Art of Eyelang, Chapter 18 — Invent examples before recursion.
2
2
  prefix([], _).
3
3
  prefix([X | Xs], [X | Ys]) :- prefix(Xs, Ys).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 18 — Separate generate, test, and describe.
1
+ % From The Art of Eyelang, Chapter 18 — Separate generate, test, and describe.
2
2
  candidate_pair(A, B) :-
3
3
  person(A),
4
4
  person(B).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 18.
1
+ % From The Art of Eyelang, Chapter 18.
2
2
  compatible_pair(A, B) :-
3
3
  person(A),
4
4
  person(B),
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 19 — Termination needs its own argument.
1
+ % From The Art of Eyelang, Chapter 19 — Termination needs its own argument.
2
2
  factorial(0, 1).
3
3
  factorial(N, F) :-
4
4
  (N > 0),
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 19 — Integrity is not merely failure.
1
+ % From The Art of Eyelang, Chapter 19 — Integrity is not merely failure.
2
2
  invalid_limits(Name, Low, High) :-
3
3
  lower_limit(Name, Low),
4
4
  upper_limit(Name, High),
@@ -1,2 +1,2 @@
1
- % From The Art of EyeLang, Chapter 20 — Strengthen calls before adding machinery.
1
+ % From The Art of Eyelang, Chapter 20 — Strengthen calls before adding machinery.
2
2
  connected(X, Y) :- path_with_nodes(X, Y, _).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 20 — Introduce helpers that express invariants.
1
+ % From The Art of Eyelang, Chapter 20 — Introduce helpers that express invariants.
2
2
  within_thermal_limits(Battery) :-
3
3
  temperature(Battery, T),
4
4
  temperature_limit(Max),
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 20 — Move invariant work outward.
1
+ % From The Art of Eyelang, Chapter 20 — Move invariant work outward.
2
2
  search(Request, Answer) :-
3
3
  normalized_request(Request, Normalized),
4
4
  search_normalized(Normalized, initial_state, Answer).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 21 — Substitutions accumulate.
1
+ % From The Art of Eyelang, Chapter 21 — Substitutions accumulate.
2
2
  grandparent(X, Z) :-
3
3
  parent(X, Y),
4
4
  parent(Y, Z).
@@ -1,2 +1,2 @@
1
- % From The Art of EyeLang, Chapter 21.
1
+ % From The Art of Eyelang, Chapter 21.
2
2
  loop_edge(Node) :- edge(Node, Node).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 21 — Failure rewinds choices, not facts.
1
+ % From The Art of Eyelang, Chapter 21 — Failure rewinds choices, not facts.
2
2
  eligible(Person) :-
3
3
  applicant(Person),
4
4
  age(Person, Age),
@@ -1,2 +1,2 @@
1
- % From The Art of EyeLang, Chapter 21 — Variants, cycles, and tables.
1
+ % From The Art of Eyelang, Chapter 21 — Variants, cycles, and tables.
2
2
  grows(X) :- grows(wrapper(X)).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 22.
1
+ % From The Art of Eyelang, Chapter 22.
2
2
  tree(
3
3
  oak,
4
4
  tree(birch, empty, empty),
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 22.
1
+ % From The Art of Eyelang, Chapter 22.
2
2
  tree_member(X, tree(X, _, _)).
3
3
  tree_member(X, tree(_, Left, _)) :- tree_member(X, Left).
4
4
  tree_member(X, tree(_, _, Right)) :- tree_member(X, Right).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 22 — Transforming a tree.
1
+ % From The Art of Eyelang, Chapter 22 — Transforming a tree.
2
2
  mirror(empty, empty).
3
3
  mirror(
4
4
  tree(Value, Left, Right),
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 22 — Interpreting an expression.
1
+ % From The Art of Eyelang, Chapter 22 — Interpreting an expression.
2
2
  evaluate(number(N), N).
3
3
 
4
4
  evaluate(add(Left, Right), Value) :-
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 22.
1
+ % From The Art of Eyelang, Chapter 22.
2
2
  lookup(Name, [binding(Name, Value) | _], Value).
3
3
  lookup(Name, [_ | Rest], Value) :- lookup(Name, Rest, Value).
4
4
 
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 22 — Rewriting symbolic expressions.
1
+ % From The Art of Eyelang, Chapter 22 — Rewriting symbolic expressions.
2
2
  simplify(add(number(0), X), X).
3
3
  simplify(add(X, number(0)), X).
4
4
  simplify(multiply(number(1), X), X).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 23 — Unfolding and folding.
1
+ % From The Art of Eyelang, Chapter 23 — Unfolding and folding.
2
2
  adult(Person) :-
3
3
  recorded_age(Person, Age),
4
4
  adult_age(Age).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 23.
1
+ % From The Art of Eyelang, Chapter 23.
2
2
  adult(Person) :-
3
3
  recorded_age(Person, Age),
4
4
  (Age >= 18).
@@ -1,4 +1,4 @@
1
- % From The Art of EyeLang, Chapter 23.
1
+ % From The Art of Eyelang, Chapter 23.
2
2
  can_board(Person) :-
3
3
  registered(Person),
4
4
  identity_checked(Person),