Hasty Briefsbeta

Bilingual

My Gripes with Prolog

17 hours ago
  • No standardized strings – ISO only defines atoms or lists of character codes, leading to incompatibility across implementations.
  • No functions – code is expressed only in predicates that return true/false; simple operations like adding 1 to a length require multiple steps.
  • Limited collection types – only linked lists and compound terms; no built-in maps or structs, and custom solutions lack cross-compatibility.
  • Boolean values absent – true/false are control flow, not data values, making it inconvenient to store and combine intermediate results.
  • Cuts (!) are confusing – they prevent backtracking but can lead to invalid programs; conditionals rely on cuts, causing unexpected behavior.
  • Negation as failure (\+) is confusing – its behavior depends on instantiation order, and it is not purely declarative.
  • Querying is interactive by default – obtaining all results at once requires bagof/setof with existential quantifiers (^), which is non‑intuitive.
  • Symbol terms have no official conventions – e.g., a-b is used for pairs but not enforced, leading to potential inconsistency.
  • sort/2 removes duplicates – it returns a sorted set, not a sorted list, requiring cumbersome workarounds to preserve duplicates.
  • Rule termination with a period – trailing commas are not allowed, making reordering lines cause syntax errors.