{
  "id": 6952113,
  "title": "Logo Programming Language",
  "url": "https://urgent.news/2026/09/12/logo-programming-language",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-09-12T16:04:06.000Z",
  "source": {
    "name": "Lobsters",
    "slug": "lobsters",
    "url": "https://el.media.mit.edu/logo-foundation/what_is_logo/logo_programming.html"
  },
  "original_language": "en",
  "account": "The Logo Programming Language is a dialect of Lisp specifically designed for educational purposes. Its interactive nature, modularity, extensibility, and flexibility in handling data types are all derived from this educational objective. Though some versions of Logo can compile code, it is typically implemented as an interpreted language, allowing users to receive immediate feedback on their individual instructions, which greatly assists in debugging and learning. Logo's error messages are also quite descriptive, for instance, the system would respond with \"One of Logo's built-in words is not fowad\" when presented with an unknown term.\n\nIn Logo, programs are generally composed of small, reusable procedures. These procedures are defined using the \"to\" keyword, followed by the procedure's name, then a series of lines that make up the procedure's definition, culminating in an \"end\" command. For example, a square-drawing procedure was defined and subsequently used within another procedure. Similarly, the \"flower\" procedure could serve as a building block for larger projects.\n\nNotably, not all words in Logo are primitives; some are user-defined. For instance, \"set-random-position\" isn't a primitive, but \"random\" and \"setpos\" (or \"setxy\") are. Users can create new procedures, like \"set-random-position,\" using only the primitives available in their Logo implementation. The distinction between primitives and user-defined words is often obscured in Logo code, except to those familiar with the specific implementation.\n\nLogo's procedural nature allows users to incrementally build complex projects by continually expanding its vocabulary. Programming in Logo is akin to learning a spoken language; users gradually add new words to their understanding based on existing knowledge. Like spoken languages, Logo operates with words and lists. A Logo word is simply a series of characters, while a list is an ordered collection of words or other lists. Numbers, despite being a form of data, are treated as special words in Logo, allowing for arithmetic operations without the need for explicit data type specification.\n\nLogo's approach to data types differs from many other programming languages, which require explicit type declarations. Logo automates this process, allowing users to perform arithmetic operations without specifying data types. The following recursive procedure for computing factorials illustrates this:\n\n\"to factorial :number if :number = 1 [output 1] output :number * factorial :number - 1 end\"\n\nAnd below is a procedure to reverse a list of words:\n\n\"to reverse :stuff ifelse equal? count :stuff 1 [output first :stuff] [output sentence reverse butfirst :stuff first :stuff] end\"\n\nWhen given the list \"[apples and pears]\", this procedure would output \"pears and apples\". Brian Harvey's Logo samples, along with those from MicroWorlds and Control Lab, demonstrate the versatility of Logo. More advanced versions like StarLogo offer enhanced capabilities such as multi-tasking and massively parallel processing. For those interested in learning Logo, the author recommends Brian Harvey's \"Computer Science Logo Style\" and Michael Friendly's \"Advanced Logo\". Additionally, various Logo software options, including UCBLogo, MSWLogo, FMSLogo, StarLogo TNG, and StarLogo Nova, are available for download.",
  "summary": null,
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}